jarsigner插件和storepass中的特殊字符

时间:2017-12-01 21:22:13

标签: maven jarsigner maven-jarsigner-plugin

我正在使用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;),一切正常,不需要引号。

1 个答案:

答案 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