【发布时间】:2014-09-08 03:02:01
【问题描述】:
我的 jar 签名插件有问题。
我在一个使用小程序的遗留项目中,所有小程序 jar 都需要签名。
首先,我在每个小程序项目中添加了 jar-signer 插件。
但是我需要在小程序中添加一个通用模块,所以我在这个项目中添加了 jarsigner 插件。
我的 web 项目中有一个任务 maven-dependency-plugin,它将签名的 jar 复制到 src/main/webapp/applet 中
但是当我编译项目时,我得到了这个错误:
java.lang.SecurityException: class X signer information does not match signer information of other classes in the same package.
我认为这是因为在我的公共项目(现已签名)中我有一些接口,而在我的 webproject(未签名)中我有实现!
我不想签署网络项目。
所以我决定删除所有项目的所有 jar-signer,只将 jar-signer 插件添加到 web-project 中,如下所示:
<plugin>
<artifactId>maven-jarsigner-plugin</artifactId>
<executions>
<execution>
<id>sign</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<archiveDirectory>${basedir}/src\main\webapp\applet</archiveDirectory>
<includes>
<include>**/*.jar</include>
</includes>
<excludes>
<exclude>**/*.war</exclude>
</excludes>
<keystore>${basedir}/src/main/resources/mykeystore.jks</keystore>
<alias>myalias</alias>
<storepass>mypassword</storepass>
<keypass>mypassword</keypass>
</configuration>
</plugin>
在这个目录中:${basedir}/src\main\webapp\applet 我有 8 个 jars 和插件签名 9jars,我们可以看到:
[INFO] Webapp assembled in [5206 msecs]
[INFO] Building war: d:\MarcoPolo\SVN\CASTOR_trunk\CTR_WEB\web\target\ctrweb-02.01.00.war
[INFO] [jarsigner:sign {execution: sign}]
[INFO] 9 archive(s) processed
[INFO] [jar:jar {execution: create-classes}]
[INFO] Building jar: d:\MarcoPolo\SVN\CASTOR_trunk\CTR_WEB\web\target\ctrweb-02.01.00-classes.jar
[INFO] [install:install {execution: default-install}]
[INFO] Installing d:\MarcoPolo\SVN\CASTOR_trunk\CTR_WEB\web\target\ctrweb-02.01.00.war to D:\Users\p
[INFO] Installing d:\MarcoPolo\SVN\CASTOR_trunk\CTR_WEB\web\target\ctrweb-02.01.00-classes.jar to D:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 5 seconds
[INFO] Finished at: Thu Jul 17 11:38:19 CEST 2014
[INFO] Final Memory: 42M/142M
[INFO] ------------------------------------------------------------------------
如果我打开 ctrweb-02.01.00.war,我可以看到所有内容都已签名!但我有<exclude>**/*.war</exclude>
我已经尝试过了
mvn jarsigner:sign
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Castor - Web war
[INFO] task-segment: [jarsigner:sign]
[INFO] ------------------------------------------------------------------------
[INFO] [jarsigner:sign {execution: default-cli}]
[INFO] 8 archive(s) processed
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Thu Jul 17 11:48:52 CEST 2014
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
只有 8 个罐子被签名。
我只想对 applet 目录中的 jar 进行签名,而不是其他目录中的 jar/war。
可以吗?
谢谢
【问题讨论】:
-
我看到排除标签不会干扰插件的主要目标,它总是在目标目录中签名 jar/war :( 为什么他们不让我们选择做我们想做的事想要...如果有人有其他解决方案...谢谢
-
我尝试使用分类器从我的项目中创建两个 jar,一个已签名,另一个未签名。在编译过程中,它总是使用未签名的 jar,而副本则使用签名的 jar,我认为它应该可以工作
-
是的,它的工作!我生成了 2 个 jar,一个没有分类器,另一个带有分类器(签名),我的 jarsigner 插件使用标签归档仅对带有分类器签名的 jar 进行签名,在编译期间,使用没有分类器的 jar,并且将带有分类器的 jar 复制到小程序 webapp 目录。所以我解决了我所有的问题!