如何从依赖jar中删除签名?

时间:2018-02-06 23:28:20

标签: maven maven-jarsigner-plugin

我有一个Maven项目foo,这是一个webstart。为了通过浏览器分发,内容需要进行jarsigned,我使用maven-jarsigner-plugin执行:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jarsigner-plugin</artifactId>
    <version>1.4</version>
    <executions>
      <execution>
        <phase>package</phase>
        <id>sign</id>
        <goals>
          <goal>sign</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <keystore>mykeystore.jks</keystore>
      <alias>myalias</alias>
      <storepass>mypass</storepass>
    </configuration>
</plugin>

那部分有效。然而,完全尴尬的情况是我需要在服务器端组件中使用webstart jar中的一些模块,让我们称之为bar,它作为war文件作为Tomcat模块运行。我没有设计这个 - 这是一个巨大的黑客,所以我不需要建议什么是糟糕的设计。这是我现在必须要解决的遗留约束。

问题是,当我将foo声明为bar的依赖项时,它需要jarsigned foo.jar - 然后我得到一个java.lang.SecurityException因为bar.war的其余部分没有签名。

问题:我有没有办法

  1. 在foo的构建过程中保存已签名和未签名的jar,然后将unsigned作为依赖项调用bar - 或

  2. 删除条形pom.xml中依赖关系声明中单个签名foo.jar中的签名?

1 个答案:

答案 0 :(得分:2)

您可以将maven 分类器与个人资料结合使用,以实现您的目标。有关分类器的更多详细信息,请参见on this page

  • 在您的pom中有两个配置文件:已签名未签名。将jarsigner plguin包含在已签名配置文件定义中。
  • 根据正在使用的配置文件设置分类器。可以在此问题中找到基于所选配置文件设置工件分类器的一个很好的示例:Building same project in Maven with different artifactid (based on JDK used)
  • 运行构建两次(每个配置文件一次)以生成签名和未签名的jar。