web-dev-qa-db-ja.com

スレッド「メイン」の例外Java.lang.SecurityException:マニフェストのメイン属性の無効な署名ファイルダイジェスト

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>
13
Jay

何時間もインターネットをサーフィンしても解決策が見つからなかった後、私はこのコマンドを偶然見つけました。

Zip -d yourjar.jar 'META-INF/.SF' 'META-INF/.RSA' 'META-INF/*SF'

このコマンドは、以前のjarの署名ファイルを取り除き、署名するとエラーは発生しません。

13
0_o

私は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>

お役に立てれば。

10
tharindu_DG

私は自分の質問の解決策を得たと思います。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

6
Jay

私は同様の問題を抱えていたので、このエラーを引き起こしていたバウンティ城の依存関係を追加しました。単にそれを削除し、その後それは大丈夫でした。

1
Athar

次のStackexchangeの質問と回答が役に立ちました。それは、artifactSet excludeの代わりにフィルターを使用します。上記の回答で解決策を試しましたが、うまくいきませんでした。

。jarを実行しようとしたときの「無効な署名ファイル」

0
jmsimpson68

このエラーは、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