我正在使用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工作。当我们有一个没有特殊字符的storepass时(例如&#34; changeme&#34;),一切正常,不需要引号。
答案 0 :(得分:0)
您可以利用profile and activation per OS在Windows上使用引号,而不是在Linux上使用引号。例如:
<profiles>
<profile>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<properties>
<jks.storepass>"my?^#pass"</jks.storepass>
</properties>
</profile>
<profile>
<activation>
<os>
<family>unix</family>
</os>
</activation>
<properties>
<jks.storepass>my?^#pass</jks.storepass>
</properties>
</profile>
</profiles>
...
<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>${jks.storepass}</storepass>
</configuration>
</plugin>
如果要在其他OS系列上运行构建,可能需要为每个系列指定一个配置文件。可用OS families and names are documented in the Enforcer plugin。