0

给出以下环境:

  • 视窗服务器 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插件无法重命名它。

所以我对一个可能的解决方案的回答。任何其他更复杂的解决方案表示赞赏。

4

1 回答 1

0

这是我目前解决它的方法:我将组件/阴影插件(您使用哪个无关紧要,它对您有利)移动到一个名为“组件”的 maven 配置文件,该配置文件默认处于活动状态。

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

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

然后我在首先构建项目时配置了 Jenkins,激活了 assmebly 插件并通过调用停用了 jarsigner 插件

-Passembly,!jarsigner

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

deploy -P!assembly,jarsigner -DskipTests

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

于 2013-07-09T12:07:34.187 回答