遵循以下环境:
构建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插件无法重命名它。
所以我的答案是可能的解决方案。任何其他更复杂的解决方案都值得赞赏。
答案 0 :(得分:0)
以下是我目前的解决方法: 我将asssembly / shade插件(无论你使用哪个,对你有利)都移动到一个名为“assembly”的maven配置文件中,默认情况下它处于活动状态。
然后我将jarsigner插件也移动到另一个名为“jarsigner”的插件中,默认情况下也是活动的。
因此,从命令行构建项目时没有任何变化。
然后我在第一次构建项目时配置了Jenkins,启用了assmebly插件,并通过调用
取消激活了jarsigner插件-Passembly,!jarsigner
并配置了一个帖子构建步骤,只需调用以下目标和参数
deploy -P!assembly,jarsigner -DskipTests
在此处跳过测试以获得性能,因为它们应该在“正常”构建期间已经通过,并且不需要执行两次。