Exception in thread "main" Java.lang.SecurityException: Invalid signature file d igest for Manifest main attributes
at Sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVeri fier.Java:240)
at Sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier .Java:193)
at Java.util.jar.JarVerifier.processEntry(JarVerifier.Java:262)
at Java.util.jar.JarVerifier.update(JarVerifier.Java:216)
at Java.util.jar.JarFile.initializeVerifier(JarFile.Java:341)
at Java.util.jar.JarFile.getInputStream(JarFile.Java:406)
at Sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.Java:75 2)
at Sun.misc.Resource.cachedInputStream(Resource.Java:77)
at Sun.misc.Resource.getByteBuffer(Resource.Java:160)
at Java.net.URLClassLoader.defineClass(URLClassLoader.Java:436)
at Java.net.URLClassLoader.access$100(URLClassLoader.Java:71)
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:361)
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:355)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:354)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:423)
at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:308)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:356)
at Sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.Java:480)
こんにちは私はこのエラーが発生しています。誰かがこれを引き起こしている原因を教えてもらえないかと思っていました。これは私のプロジェクトのpoxファイルのスナップショットです。任意の助けいただければ幸いです。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.50</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
<version>5.1.29</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1101-jdbc41</version>
</dependency>
<dependency>
<groupId>org.objectweb.joram</groupId>
<artifactId>jftp</artifactId>
<version>1.52</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>junit:junit</exclude>
<exclude>org.Apache.maven:lib:tests</exclude>
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
何時間もインターネットをサーフィンしても解決策が見つからなかった後、私はこのコマンドを偶然見つけました。
Zip -d yourjar.jar 'META-INF/.SF' 'META-INF/.RSA' 'META-INF/*SF'
このコマンドは、以前のjarの署名ファイルを取り除き、署名するとエラーは発生しません。
私はmavenでuber jarを作成しようとしていて、この問題に遭遇し、次のように問題を解決することができました。
以下は、shade
プラグインを設定して、Twitter4j
をuber jarに含める方法です。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>spark-streaming-Twitter_2.10:spark-streaming-Twitter_2.10</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<filter>
<artifact>Twitter4j-stream:Twitter4j-stream</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
お役に立てれば。
私は自分の質問の解決策を得たと思います。pom.xml
に下記のタグを追加すると問題が解決します:
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
<exclude>junit:junit</exclude>
<exclude>org.Apache.maven:lib:tests</exclude>
</excludes>
http://docs.Oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Signed_JAR_File
私は同様の問題を抱えていたので、このエラーを引き起こしていたバウンティ城の依存関係を追加しました。単にそれを削除し、その後それは大丈夫でした。
次のStackexchangeの質問と回答が役に立ちました。それは、artifactSet excludeの代わりにフィルターを使用します。上記の回答で解決策を試しましたが、うまくいきませんでした。
このエラーは、Mavenシェードプラグインが依存関係の1つを変更したため、それらのライブラリの署名が無効であることを意味します。
署名ファイルを削除することは、回避策であり、ユースケースに応じた解決策です。私にとってそれは悪い習慣なので、Apache Maven Assembly Pluginのmavenシェードプラグインを置き換えて、依存関係のあるjarを作成し、動作するようです https://maven.Apache.org/plugins/maven-アセンブリプラグイン/
例:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-Assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
your.class.with.main.method
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
依存関係を含めてjarをビルドします。
mvn package