给出以下环境:
- 视窗服务器 2012
- Java 1.6
- 配置了(程序集或阴影插件)和 jarsigner:sign/verify 插件的 Maven 项目
- 在 Tomcat 7 中运行的 Jenkins 1.518(与 Java 1.7 一起运行)
- Tomcat 作为 Windows 服务用户运行
在构建 maven 项目时,一切正常,并且构建了程序集(使用程序集插件以及 shade 插件),最后使用 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插件无法重命名它。
所以我对一个可能的解决方案的回答。任何其他更复杂的解决方案表示赞赏。