web-dev-qa-db-ja.com

どの署名されたjarがmaven-shade-pluginの失敗を引き起こしているのかをどのように知ることができますか?

Maven-shade-pluginを実行するには、ここに示すように、署名された依存関係のために、説明されているメソッドに使用する必要があります ここ

<plugin>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals><goal>shade</goal></goals>
            <configuration>
                <filters>
                    <filter>
                        <!-- filter out signature files from signed dependencies, else repackaging fails with security ex -->
                        <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>

質問:どのJARがプラグインの失敗を引き起こしたかをどのように知ることができますか?最近言及されたものではないようです。

デバッグ出力のテール:

[DEBUG] We have a duplicate org/jdom2/xpath/util/AbstractXPathCompiled.class in C:\Users\me\aaaa-1.11.0-SNAPSHOT.jar
[DEBUG] We have a duplicate org/jdom2/xpath/util/XPathDiagnosticImpl.class in C:\Users\me\aaaa-1.11.0-SNAPSHOT.jar
[DEBUG] Processing JAR C:\Users\me\bbbb-1.11.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Retrievers JAR ................................ FAILURE [  9.581 s]
[INFO] Retrievers .................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.208 s
[INFO] Finished at: 2015-05-12T14:20:54-05:00
[INFO] Final Memory: 100M/726M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:2.3:shade (default) on project aaa-retrievers-jar: Error creating shaded jar: Invalid signature file digest for Manifest main attributes -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:2.3:shade (default) on project aaa-retrievers-jar: Error creating shaded jar: Invalid signature file digest for Manifest main attributes
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:216)
    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:108)
    at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:76)
    at org.Apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.Java:51)
    at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:116)
    at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:361)
    at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:155)
    at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:584)
    at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:213)
    at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:157)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:483)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.Java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.Java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:356)
Caused by: org.Apache.maven.plugin.MojoExecutionException: Error creating shaded jar: Invalid signature file digest for Manifest main attributes
    at org.Apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.Java:566)
    at org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.Java:133)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:208)
    ... 19 more
Caused by: Java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
    at Sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.Java:284)
    at Sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.Java:238)
    at Java.util.jar.JarVerifier.processEntry(JarVerifier.Java:316)
    at Java.util.jar.JarVerifier.update(JarVerifier.Java:228)
    at Java.util.jar.JarFile.initializeVerifier(JarFile.Java:383)
    at Java.util.jar.JarFile.getInputStream(JarFile.Java:450)
    at org.Apache.maven.plugins.shade.DefaultShader.shade(DefaultShader.Java:147)
    at org.Apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.Java:471)
    ... 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
14
jordanpg

シェードプラグインは、含めた依存関係のすべてのjarを解凍し、それらの内容を1つのjarファイルに詰め込みます。まるで自分で全部書いたかのようです。

構成は、META-INFと呼ばれるディレクトリに含まれている場合、.SF、.DSA、または.RSAで終わるファイルを移動しないようにshadeプラグインに指示しています。

したがって、あなたがする必要があるのは、どのjarにそれらのファイルがあるかを把握することだけです。

私が最初にすることは、フィルターセクションをコメントアウトして再構築することです。次に、それらの拡張機能のシェーディングされたjarをgrepします。それはあなたにパッケージへの手がかりを与えるかもしれません。

Jarコマンドの-tオプションは、アーカイブ内のすべてのファイルを抽出せずに一覧表示します。一般に、jar構文はtarと非常によく似ています。

jar -tvf target/myapp-1.0.3-SNAPSHOT.jar | grep -i dsa

META-INF/BCKEY.DSA

私の場合、それはかなり明白でした。最近、依存関係として弾む城を追加しました。 BCKEY.DSAは、弾力がある城の鍵のようです。

確認のために、弾力のある城の瓶で同じアクションを実行しました。これをMavenで構築したので、jarはローカルリポジトリにあります。

tar -tvf .m2/repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar | grep -i dsa
-rwxrwxrwx  0 0      0           0 Feb  9  2013 META-INF/BCKEY.DSA
8
TheSporkboy

mavenとbash + awk + ​​sedで署名されたJARのリストを取得するには、次のような方法を試すことができます。

#!/bin/bash
mvn_classpath=`mvn dependency:build-classpath -B | awk '/Dependencies classpath:/{getline; print}' | sed -e s/:/\\\\n/g`

for jar in $mvn_classpath; do 
        echo -n `jarsigner -verify $jar | grep verified | wc -l`; echo " $jar"; 
done

これにより、プロジェクトで使用されるJARファイルが一覧表示されます。署名および検証されたファイルの前には1が付き、署名なしには0が付きます。検証できない署名付きJARがなかったため、ロジックがどのように表示されるかわかりません。この場合。

0
Rostislav Matl