mvn install
を実行すると、以下の例外が発生します。私もローカルリポジトリを削除し、同じ例外を受けて再度走った。
[エラー]目標org.Apache.maven.pluginsの実行に失敗しました:maven-shade-plugin:2.1:プロジェクトcore-batchでshade(デフォルト):陰影付きjarの作成エラー:無効なLOCヘッダ(不正な署名) - > [ヘルプ1 ]
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>commons-logging:commons-logging:jar:*</exclude>
</excludes>
</artifactSet>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<!-- workaround for a spring issues -->
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
<!-- don't want to pick up any other log4j.xml -->
<exclude>log4j.xml</exclude>
</excludes>
</filter>
</filters>
<!-- May be needed to work around another issue in Spring -->
<transformers>
<transformer implementation="org.Apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.Apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
エラー:
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:2.1:shade (default) on project cores-batch: Error creating shaded jar: invalid LOC header (bad signature) -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:2.1:shade (default) on project cores-batch: Error creating shaded jar: invalid LOC header (bad signature)
at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:217)
at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:153)
at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:145)
at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:84)
at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:59)
at org.Apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.Java:183)
at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:161)
at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:320)
at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:156)
at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:537)
at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:196)
at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:141)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.Java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.Java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:352)
Caused by: org.Apache.maven.plugin.MojoExecutionException: Error creating shaded jar: invalid LOC header (bad signature)
at org.Apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.Java:528)
at org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.Java:101)
at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:209)
... 19 more
Caused by: Java.util.Zip.ZipException: invalid LOC header (bad signature)
at Java.util.Zip.ZipFile.read(Native Method)
at Java.util.Zip.ZipFile.access$1400(ZipFile.Java:56)
at Java.util.Zip.ZipFile$ZipFileInputStream.read(ZipFile.Java:679)
at Java.util.Zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.Java:415)
at Java.util.Zip.InflaterInputStream.read(InflaterInputStream.Java:158)
at Java.io.FilterInputStream.read(FilterInputStream.Java:107)
at org.codehaus.plexus.util.IOUtil.copy(IOUtil.Java:189)
at org.codehaus.plexus.util.IOUtil.copy(IOUtil.Java:175)
at org.Apache.maven.plugins.shade.DefaultShader.addResource(DefaultShader.Java:427)
at org.Apache.maven.plugins.shade.DefaultShader.shade(DefaultShader.Java:186)
at org.Apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.Java:458)
... 21 more
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.Apache.org/confluence/display/MAVEN/MojoExecutionException
どのjarが問題を起こしているのかを確認する必要があります。破損しているはずです。そのjarを削除してmvn spring-boot:run
コマンドをもう一度実行してください。そのjarを削除するためにそのコマンドを実行する必要があるたびに1つ以上のjarが破損している可能性があります。私の場合はmysql、jackson、アスペクトjarがmvn spring-boot:run
コマンドを3回破損していたので、これを見つけて.m2
フォルダからjarを削除しました。これで問題は解決しました。
Jarファイルが破損している可能性があります。次のフォルダの内容を削除してみてください。
C:\Users\[username]\.m2\repository
次にプロジェクトを右クリックし、Mavenを選択してプロジェクトを更新し、スナップショット/リリースの強制更新をチェックします。
主な問題は破損したjarファイルです。
破損したものを見つけるには、EclipseのBreakpointsビューまたは希望のIDEに Java Exception Breakpoint を追加し、Java.util.Zip.ZipException
クラスを選択してTomcatインスタンスを再起動する必要があります。
JVMがZipException
ブレークポイントで中断した場合は、スタックトレースのJarFile.getManifestFromReference()
に移動し、属性name
を調べてファイル名を確認する必要があります。
その後、ファイルシステムからファイルを削除して、プロジェクトを右クリックし、Mavenを選択してプロジェクトを更新し、スナップショット/リリースの強制更新をチェックします。
gsitgithub/find-currupt-jars.txt から、次のコマンドはリポジトリ内のすべての破損したjarファイルを一覧表示します。
find /home/me/.m2/repository/ -name "*jar" | xargs -L 1 Zip -T | grep error | grep invalid
破損したjarファイルを削除して、プロジェクトを再コンパイルすることができます。
出力例
warning [/cygdrive/J/repo/net/Java/dev/jna/jna/4.1.0/jna-4.1.0.jar]: 98304 extra bytes at beginning or within zipfile
(attempting to process anyway)
file #1: bad zipfile offset (local header sig): 98304
(attempting to re-compensate)
Zip error: Zip file invalid, could not spawn unzip, or wrong unzip (original files unmodified)
私にとっての解決策は、mvn
を-X
で実行することでした。
$ mvn package -X
それから失敗を見るまで出力を逆方向に見てから、mvnが処理しようとした最後のjarファイルが見つかるまで続けます。
...
... <<output ommitted>>
...
[DEBUG] Processing JAR /Users/snowch/.m2/repository/org/Eclipse/jetty/jetty-server/9.2.15.v20160210/jetty-server-9.2.15.v20160210.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.607 s
[INFO] Finished at: 2017-10-04T14:30:13+01:00
[INFO] Final Memory: 23M/370M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:3.1.0:shade (default) on project kafka-connect-on-cloud-foundry: Error creating shaded jar: invalid LOC header (bad signature) -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:3.1.0:shade (default) on project kafka-connect-on-cloud-foundry: Error creating shaded jar: invalid LOC header (bad signature)
失敗する前の最後のjarを見て、それをローカルリポジトリから削除します。
$ rm -rf /Users/snowch/.m2/repository/org/Eclipse/jetty/jetty-server/9.2.15.v20160210/
あなたのpomファイルのmavenコンパイラの設定の問題のように見えます。デフォルトのバージョンのJavaソースとターゲットは1.5です。使用されているJDKでもより高いバージョンです。
修正するために、より高いバージョンのJavaでmavenコンパイラプラグイン設定セクションを追加してください、例:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
詳細については、これらのリンクを確認してください。
.m2/repositoryを削除する以外に、サーバーからアプリケーションを削除し、サーバーを起動し(アプリケーションを使用せずに)、停止して、再度アプリケーションを追加します。今ではうまくいくはずです。何らかの理由で、単にインターフェースからサーバーフォルダーをクリーンアップしても同じ効果はありません。
私はこの問題に直面していましたが、私は自分の地域のweblogicインスタンスに耳を傾けました。ローカルレポジトリをクリアして耳を傾けることで、問題が解決しました。
少なくとも2つのオプションを使用して、チェックサム検証を強制的に行うことができます。
1. mavenコマンドに--strict-checksums
を追加します。
2. Mavenの設定ファイルに次の設定を追加します。
<settings xmlns="http://maven.Apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/SETTINGS/1.0.0
https://maven.Apache.org/xsd/settings-1.0.0.xsd">
<!--...-->
<profiles>
<profile>
<!--...-->
<repositories>
<repository>
<id>codehausSnapshots</id>
<name>Codehaus Snapshots</name>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>
<!--...-->
</url>
</repository>
</repositories>
<pluginRepositories>
<!--...-->
</pluginRepositories>
<!--...-->
</profile>
</profiles>
<!--...-->
</settings>
この記事での詳細: https://dzone.com/articles/maven-artifact-checksums-what
これは主にmavenが原因です。IDEAを使用している場合は、次の手順を試してください。
1. IDEAを使って "maven clean"を実行すると、uが表示されます。
[INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for com.hisen:BookSystem_V0:war:1.0-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.Apache.maven.plugins:maven-compiler-plugin is missing. @ line 116, column 15 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
間違った瓶に交換する
2. IDEAを使って "maven compile"を実行すると、uが表示されます。
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
错误: 读取/Users/qinkai/.m2/repository/ch/qos/logback/logback-classic/1.1.1/logback-classic-1.1.1.jar时出错; invalid LOC header (bad signature)
错误: 读取/Users/qinkai/.m2/repository/ch/qos/logback/logback-core/1.1.1/logback-core-1.1.1.jar时出错; invalid LOC header (bad signature)
2 个错误
間違った瓶を解決する
それから問題は解決されます。
ほとんどの場合、これはpom.xmlファイルのmaven中央リポジトリURLを更新する破損したzarsが私の問題を解決したために起こります。このURLを使用することができます https://repo.maven.Apache.org/maven2/ が前.m2ディレクトリ内のファイルを削除することで、これが役立つことを願っています
"無効なLOCハンドラ(不正な署名)"
これはおそらく、Mavenによってダウンロードされた破損したjarファイルが原因です。クイックフィックス、 .m2/repository ディレクトリをバックアップし、 .m2/repository ディレクトリを削除してから、 再構築またはMavenを実行することをお勧めします。 -更新。
"-e -X"オプションを指定してプロジェクトをビルドし、破損したjarファイルを見つけてjarファイルをローカルリポジトリから削除します。
これはJavaで書かれた小さなディテクタです。コピーして実行するだけです:)
import Java.io.IOException;
import Java.nio.file.Files;
import Java.nio.file.Path;
import Java.nio.file.Paths;
import Java.util.ArrayList;
import Java.util.List;
import Java.util.jar.JarFile;
import Java.util.stream.Collectors;
public class JarValidator {
public static void main(String[] args) throws IOException {
Path repositoryPath = Paths.get("C:\\Users\\goxr3plus\\.m2");
// Check if the main Repository Exists
if (Files.exists(repositoryPath)) {
// Create a class instance
JarValidator jv = new JarValidator();
List<String> jarReport = new ArrayList<>();
jarReport.add("Repository to process: " + repositoryPath.toString());
// Get all the directory files
List<Path> jarFiles = jv.getFiles(repositoryPath, ".jar");
jarReport.add("Number of jars to process: " + jarFiles.size());
jarReport.addAll(jv.openJars(jarFiles, true));
// Print the report
jarReport.stream().forEach(System.out::println);
} else {
System.out.println("Repository path " + repositoryPath + " does not exist.");
}
}
/**
* Get all the files from the given directory matching the specified extension
*
* @param filePath Absolute File Path
* @param fileExtension File extension
* @return A list of all the files contained in the directory
* @throws IOException
*/
private List<Path> getFiles(Path filePath, String fileExtension) throws IOException {
return Files.walk(filePath).filter(p -> p.toString().endsWith(fileExtension)).collect(Collectors.toList());
}
/**
* Try to open all the jar files
*
* @param jarFiles
* @return A List of Messages for Corrupted Jars
*/
private List<String> openJars(List<Path> jarFiles, boolean showOkayJars) {
int[] badJars = { 0 };
List<String> messages = new ArrayList<>();
// For Each Jar
jarFiles.forEach(path -> {
try (JarFile file = new JarFile(path.toFile())) {
if (showOkayJars)
messages.add("OK : " + path.toString());
} catch (IOException ex) {
messages.add(path.toAbsolutePath() + " threw exception: " + ex.toString());
badJars[0]++;
}
});
messages.add("Total bad jars = " + badJars[0]);
return messages;
}
}
出力
Repository to process: C:\Users\goxr3plus\.m2
Number of jars to process: 4920
C:\Users\goxr3plus\.m2\repository\bouncycastle\isoparser-1.1.18.jar threw exception: Java.util.Zip.ZipException: Zip END header not found
Total bad jars = 1
BUILD SUCCESSFUL (total time: 2 seconds)
これには多くの理由が考えられます。
1:Web.XMLのバージョンを変えてみる
2:あなたが使おうとしているJarが壊れている可能性があります。例:MavenのJarに異なるバージョンを使用する