maven签名不仅可以生成jar,还可以生成依赖

时间:2009-05-18 22:54:27

标签: maven-2 jar sign

我设法创建主jar,将依赖项复制到一个目录,剩下的唯一步骤是签署所有jar。

我可以将自己制作的jar作为jar:sign的一部分签名,但我如何签署依赖项?

由于

4 个答案:

答案 0 :(得分:7)

以下是几个选项:

  1. 使用Maven ant任务从JDK对所有依赖项运行jarsigner。
  2. 使用可以签署所有JAR的webstart plugin,即使您没有将其用于JNLP-izing您的应用程序。我正在使用它实际上JNLPize一个应用程序。
  3. 看看webstart插件源正在做什么来迭代所有依赖项并签署它们并启动一个新的Maven插件/ Mojo来做同样的事情,没有JNLP。
  4. Onejar your app and its dependencies,然后签名。

答案 1 :(得分:1)

添加到插件配置<archiveDirectory>target</archiveDirectory>

答案 2 :(得分:0)

如果您使用maven-jar-plugin,则可以使用“jarPath”设置指定要签名的单个 jar。以下配置导致jar-with-dependencies文件被标记为而不是的无依赖jar文件:

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
      <execution>
        <goals>
          <goal>sign</goal>
        </goals>
      </execution>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>sign</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <!-- NOTE: The secret key is in shared version control.  The
           password is in shared version control.  This IS NOT
           SECURE.  It's intended to help avoid accidentally
           loading the wrong class, nothing more. -->
      <jarPath>${project.build.directory}/${project.build.FinalName}-${project.packaging}-with-dependencies.${project.packaging}</jarPath>
      <keystore>${basedir}/keystore</keystore>
      <alias>SharedSecret</alias>
      <storepass>FOO</storepass>
    </configuration>
  </plugin>

如果你想同时签名,我不知道如何使用maven-jar-plugin,所以你可能需要查看上面提到的其他选项。

答案 3 :(得分:0)

也可以使用maven-assembly-plugin创建一个JAR。

与Eric Anderson的另一个建议(签署另一个JAR)一起,可以签署这个组合的JAR(而不是原始的JAR)。请注意,插件定义的顺序在这里很重要。

假设sign.keystore.file等在别处设置(例如在配置文件中)。

<build>
    <plugins>
        <!-- It seems that maven-assembly-plugin must be declared before the maven-jar-plugin,
             so that it is executed first in the package phase,
             and then the signing of the packaged jar can succeed. -->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifestEntries>
                        <!-- ... -->
                    </manifestEntries>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>sign</goal>
                    </goals>
                    <configuration>
                        <jarPath>${project.build.directory}/${project.build.FinalName}-${project.packaging}-with-dependencies.${project.packaging}</jarPath>
                        <keystore>${sign.keystore.file}</keystore>
                        <type>${sign.keystore.type}</type>
                        <storepass>${sign.keystore.storepass}</storepass>
                        <alias>${sign.keystore.alias}</alias>
                        <verify>true</verify>
                        <verbose>false</verbose>
                        <removeExistingSignatures>true</removeExistingSignatures>
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <archive>
                    <manifest>
                        <!-- <addClasspath>true</addClasspath> -->
                    </manifest>
                    <manifestEntries>
                        <!-- ... -->
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>