我有一个多模块项目,其中父POM指定(在配置文件中)配置和使用maven-jarsigner-plugin来签署项目产生的jar。
<profile>
<id>sign</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>sign-jars</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<keystore>/tmp/certificates.ks</keystore>
<alias>jarsign</alias>
<storepass>password</storepass>
<keypass>password</keypass>
</configuration>
</plugin>
</plugins>
</build>
</profile>
项目中的一些子模块还使用maven-jar-plugin来生成测试jar:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>test-jar</id>
<phase>package</phase>
<configuration>
</configuration>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
我观察到当启用签名配置文件时(例如mvn -Psign install
),Maven按以下顺序执行目标:
这会导致一个未签名的测试jar(在target/
和本地存储库中),这会在后续项目尝试使用该测试jar时导致java安全问题。
有没有办法确保jar:jar和jar:test-jar在jarsigner之前执行:sign?
答案 0 :(得分:1)
将你的test-jar
执行移至prepare-package
阶段,然后在jarsigner开始的时候它就会出现。
或者,在与测试jar相同的POM中指定签名配置文件。
我对程序集插件有类似的情况,如果程序集和jarsigner在同一个POM中,顺序很好,但如果jarsigner在父POM中,则顺序不好(Maven 2.2.1)。