与えられた次の環境:
- Windows Server 2012
- Java 1.6
- 構成済みの Maven プロジェクト (アセンブリまたはシェード プラグイン) および jarsigner:sign/verify プラグイン
- Tomcat 7 内で動作する Jenkins 1.518 (Java 1.7 で動作)
- Windows サービス ユーザーとして実行されている Tomcat
Maven プロジェクトをビルドすると、すべてが正常に機能し、アセンブリがビルドされ (アセンブリ プラグインとシェード プラグインを使用)、最後にアセンブリが署名され、maven-jarsigner-plugin で検証されます。
しかし、 jarsignerがアセンブリに署名しようとすると、Jenkins で構成された同じプロジェクトがビルド中に失敗します。ログファイルは次のように述べています。
message : Failed to execute goal org.apache.maven.plugins:maven-jarsigner-plugin:1.2:sign (sign) on project ext.pdfgui: Execution of 'cmd.exe /X /C ""C:\Program Files\Java\jdk1.6.0_43\jre\..\bin\jarsigner.exe" -verbose -keystore src/main/resources/signjar.keystore -storepass '*****' -keypass '*****' "D:\server\jenkinsWorkingDir\jobs\<project name>\workspace\trunk\<module>\target\artifact-jar-with-dependencies.jar" <cert alias>"' failed - Errorcode (1)
cause : Execution of 'cmd.exe /X /C ""C:\Program Files\Java\jdk1.6.0_43\jre\..\bin\jarsigner.exe" -verbose -keystore src/main/resources/signjar.keystore -storepass '*****' -keypass '*****' "D:\server\jenkinsWorkingDir\jobs\<project name>\workspace\trunk\<module>\target\artifact-jar-with-dependencies.jar" <cert alias>"' failed - Errorcode (1)
Stack trace :
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-jarsigner-plugin:1.2:sign (sign) on project ext.pdfgui: Execution of 'cmd.exe /X /C ""C:\Program Files\Java\jdk1.6.0_43\jre\..\bin\jarsigner.exe" -verbose -keystore src/main/resources/signjar.keystore -storepass '*****' -keypass '*****' "D:\server\jenkinsWorkingDir\jobs\<project name>\workspace\trunk\<module>\target\artifact-jar-with-dependencies.jar" <cert alias>"' failed - Errorcode (1)
上記のログ ファイルをドイツ語から英語に翻訳したので、正確な言い回しがわからないため、異なる場合があります。
詳細なログ ファイルには次のように記載されています。
[INFO] jarsigner: attempt to rename D:\server\jenkinsWorkingDir\jobs\<project name>\workspace\trunk\<module>\target\<artifact>-jar-with-dependencies.jar to D:\server\jenkinsWorkingDir\jobs\<project name>\workspace\trunk\<module>\target\<artifact>-jar-with-dependencies.jar.orig failed
解決策を探していると、このブログエントリにたどり着きました: http://www.iliachemodanov.ru/en/blog-en/14-tools/maven/44-maven-assembly-plugin-bug-en
ここで「maven-shade-plugin」が解決策として挙げられていたので、試してみます。pom ファイルを再構成しましたが、効果は同じです。Windows、Tomcat、または Jenkins がアセンブリのファイル ハンドルを保持しており、jarsigner プラグインがその名前を変更できないことがわかります。
だから、可能な解決策に対する私の答え。他のより洗練されたソリューションは高く評価されます。