maven-jarsigner-plugin在Jenkins构建期间失败但在命令行上没有

时间:2013-07-09 12:07:34

标签: java maven maven-assembly-plugin jarsigner maven-shade-plugin

遵循以下环境:

  • Windows Server 2012
  • Java 1.6
  • 配置(装配或阴影插件)和jarsigner:签名/验证插件
  • 的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插件无法重命名它。

所以我的答案是可能的解决方案。任何其他更复杂的解决方案都值得赞赏。

1 个答案:

答案 0 :(得分:0)

以下是我目前的解决方法: 我将asssembly / shade插件(无论你使用哪个,对你有利)都移动到一个名为“assembly”的maven配置文件中,默认情况下它处于活动状态。

然后我将jarsigner插件也移动到另一个名为“jarsigner”的插件中,默认情况下也是活动的。

因此,从命令行构建项目时没有任何变化。

然后我在第一次构建项目时配置了Jenkins,启用了assmebly插件,并通过调用

取消激活了jarsigner插件
-Passembly,!jarsigner

并配置了一个帖子构建步骤,只需调用以下目标和参数

deploy -P!assembly,jarsigner -DskipTests

在此处跳过测试以获得性能,因为它们应该在“正常”构建期间已经通过,并且不需要执行两次。