Maven可以重新签署依赖关系吗?

时间:2014-01-09 17:12:18

标签: java maven applet jar-signing signed-applet

我正在使用maven-jarsigner-plugin签署我的阴影超级罐。我确实需要在自己的jar中分发一些依赖项,并希望从Maven仓库获取这些jar,清除它们的任何现有签名,并使用我自己的证书进行签名。

是否有任何Maven插件可以执行此操作,或者我是否会涉及一些Ant插件hackery?

4 个答案:

答案 0 :(得分:5)

结果maven-jarsigner-plugin可以重新 - 使用它的removeExistingSignatures配置元素设置现有的jar。这么简单!

我使用maven-dependency-plugin将工件复制到generate-resources阶段的.war项目中,然后在process-resources阶段对其进行签名。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
    <executions>
        <execution>
            <id>copy</id>
            <phase>generate-resources</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>org.lwjgl.lwjgl</groupId>
                        <artifactId>lwjgl-platform</artifactId>
                        <version>2.9.0</version>
                        <classifier>natives-osx</classifier>
                        <type>jar</type>
                        <overWrite>true</overWrite>
                        <outputDirectory>src/main/webapp/</outputDirectory>
                        <destFileName>lwjgl-platform-natives-osx.jar</destFileName>
                    </artifactItem>   
                </artifactItems>        
                <outputDirectory>src/main/webapp</outputDirectory>
                <overWriteReleases>true</overWriteReleases>
                <overWriteSnapshots>true</overWriteSnapshots>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jarsigner-plugin</artifactId>
    <version>1.2</version>
    <executions>
        <execution>
            <id>sign</id>
            <phase>process-resources</phase>
        <goals>
            <goal>sign</goal>
            </goals>
    </execution>
    </executions>
    <configuration>
        <keystore>${basedir}/path/to/my.keystore</keystore>
        <alias>alias</alias>
        <storepass>password</storepass>
        <keypass>password</keypass>
        <verbose>true</verbose>
        <archiveDirectory>src/main/webapp/</archiveDirectory>
        <processMainArtifact>false</processMainArtifact>
        <removeExistingSignatures>true</removeExistingSignatures>
    </configuration>
</plugin>

答案 1 :(得分:3)

我知道这不是一个非常好的答案,但我会在这些步骤中尝试解决方案:

  • maven-dependency-plugin
  • 复制依赖项
  • antrun<unzip>他们,再次从/ META-INF目录中删除除MANIFEST.MF,<jar>之外的所有内容,并使用<jarsign> ant任务再次签名。< / LI>

自从我使用maven(最近我承认)以来,我发现的主要问题是它会让你通过它预定义的管道,而这种事情(比看起来更常见)会让你需要一些蚂蚁hackery,你称之为;)

答案 2 :(得分:2)

从未使用它,但似乎webstart-maven-plugin可以取消签名和签名。

http://mojo.codehaus.org/webstart/webstart-maven-plugin/unsign-mojo.html

希望得到这个帮助。

答案 3 :(得分:2)

使用maven:

为每个要重新签名的jar创建一个空的maven jar模块,执行其中一个jar的maven dependency:unpack,过滤签名文件并将文件复制到src / main / java。

然后使用maven-jarsigned-plugin对jar进行签名,结果将是一个包含相同类的jar。

替代非maven:

上述方法不能很好地扩展,创建跟在these steps之后的脚本可能更简单。

最简单的方法是:

考虑在maven存储库中注册签名者的公钥,而不是重新签名,这意味着您信任创建这些jar的人并接受来自他们的任何jar。

事实是,您已经信任他们,因为您正在使用他们的代码并将其重新签名,因此将存储库配置为接受其签名会更简单,就像 已经配置了存储库一样有人接受您的签名

存储库链接到一个密钥存储区,其中包含接受的jar签名者的公钥,这可能是要求处理存储库的团队再向其可信签名者列表添加一个密钥,他们会知道如何要做到这一点肯定。