【问题标题】:jarsigner plugin and special characters in storepassjarsigner 插件和 storepass 中的特殊字符
【发布时间】:2018-05-16 01:08:40
【问题描述】:

我正在使用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”)的商店通行证时,一切正常且不需要引号。

【问题讨论】:

    标签: maven jarsigner maven-jarsigner-plugin


    【解决方案1】:

    您可以利用 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 families and names are documented in the Enforcer plugin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多