如何确保在包装阶段签署测试罐?

时间:2010-11-15 17:31:07

标签: maven-2

我有一个多模块项目,其中父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按以下顺序执行目标:

  • 罐:罐
  • 的jarsigner:符号
  • 罐:测试罐
  • 安装:安装

这会导致一个未签名的测试jar(在target/和本地存储库中),这会在后续项目尝试使用该测试jar时导致java安全问题。

有没有办法确保jar:jar和jar:test-jar在jarsigner之前执行:sign?

1 个答案:

答案 0 :(得分:1)

将你的test-jar执行移至prepare-package阶段,然后在jarsigner开始的时候它就会出现。

或者,在与测试jar相同的POM中指定签名配置文件。

我对程序集插件有类似的情况,如果程序集和jarsigner在同一个POM中,顺序很好,但如果jarsigner在父POM中,则顺序不好(Maven 2.2.1)。