我maven-jarsigner-plugin
用来签署一些 webstart jar:
<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>key/mystore.jks</keystore>
<alias>myalias</alias>
<storepass>aBc.d:efg,H#ij^k?L</storepass>
</configuration>
</plugin>
问题似乎是 storepass 中的特殊字符。当我在 Windows 上时,提供如上所示的 storepass 会导致以下错误:
Failed executing 'cmd.exe /X /C "D:\SOFT\JDK8\jre\..\bin\jarsigner.exe ...
当我运行底层 jarsigner 命令时:
jarsigner.exe -keystore D:\path\to\mystore.jks -storepass aBc.d:efg,H#ij^k?LD:\path\to\project\target\webstarts.jar myalias
我收到类似的错误,但是当我将 storepass 用引号括起来时,它可以工作。所以我回到我pom.xml
的里面,把商店通行证放在引号里:
<storepass>"aBc.d:efg,H#ij^k?L"</storepass>
它奏效了。不幸的是,当我在我的构建服务器(Linux)上运行相同的构建时,引号不起作用——它只能在没有引号的情况下起作用。所以我试图将 storepass 文字完全从 pom 中取出并做类似的事情
<storepass>${jks.storepass}</storepass>
接着
mvn clean package -Djks.storepass=aBc.d:efg,H#ij^k?L
但这在 Windows 上不管有没有引号都不起作用。
我正在寻找一种解决方案,它支持带有特殊字符的 storepass,并且可以在 Windows 和 Linux 上使用相同的 pom。当我们有一个没有特殊字符(如“changeme”)的商店通行证时,一切正常并且不需要引号。