2

我有一个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,它作为一个Tomcat模块作为 war 文件运行。我没有设计这个——这是一个巨大的黑客,所以我不需要关于这是一个糟糕的设计的建议。这是我现在必须在其中工作的遗留约束。

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

问题:我有没有办法

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

  2. pom.xml在 bar 的?中删除依赖声明中的单签名 foo.jar 中的签名

4

1 回答 1

2

您可以将 maven分类器与配置文件结合使用来实现您想要的。有关分类器的更多详细信息可以在此页面上找到

  • 在你的 pom 中有两个配置文件:signedunsigned。将 jarsigner 插件作为签名配置文件定义的一部分。
  • 根据正在使用的配置文件设置分类器。可以在以下问题中找到基于所选配置文件设置工件分类器的一个很好的示例:Building same project in Maven with different artifactid (based on JDK used)
  • 运行构建两次(每个配置文件一次)以生成签名和未签名的 jar。
于 2018-02-07T04:52:12.107 回答