3

我们在构建中签署了很多 jar 文件。目前它需要总构建时间的 60-80%,从 15 分钟变为 45+ 分钟。因此,我们对通过并行化加速签名过程非常感兴趣。

所有 jars 都在一个文件夹中,现在我们的脚本看起来像这样:

<property name="jars.dir" location="......" />
<signJar ...paswords etc... />
  <fileset dir="${jars.dir}" includes="**/*.jar" />
</signJar>

我不能随便使用parallel标签,因为所有 jar 都在一个文件夹中,所以我们需要一些其他方法来使其并行。该构建将在许多不同的计算机和服务器上运行,因此解决方案足够灵活以处理不同数量的内核非常重要。

希望你们中的一些人可以提供帮助。谢谢 :)

4

2 回答 2

3

您可以使用for 任务迭代您的 jar 文件集,然后通过调用 signJar 任务对每个 jar 进行签名。for 任务还具有用于控制并发性的并行选项和属性。

于 2013-08-22T09:24:49.930 回答
1

FWIW,这是我用来为 webstart 签名和打包 JAR 的宏。这会添加所需的清单属性并通过重新打包来规范化 JAR 以进行签名。

当从并行<for>循环中调用此宏时,它工作得很好。

您需要<signjar>使用您的关键信息来调整任务。

<!-- Macro for JAR signing and pack200 -->
<macrodef name="sign-and-pack">
    <attribute name="jar"/>
    <sequential>
        <echo message="Signing and packing @{jar}..."/>

        <!-- Kill any existing signatures and delete existing manifest -->
        <exec executable="zip" logError="true" failonerror="false">
            <arg value="-d"/>
            <arg value="--quiet"/>
            <arg value="@{jar}"/>
            <arg value="META-INF/MANIFEST.MF"/>
            <arg value="META-INF/*.SF"/>
            <arg value="META-INF/*.DSA"/>
            <arg value="META-INF/*.RSA"/>
        </exec>

        <!-- Rebuild manifest with the required attributes -->
        <jar update="true" file="@{jar}">
            <manifest>
                <attribute name="Application-Name" value="${webstart.app.name}"/>
                <attribute name="Permissions" value="all-permissions"/>
                <attribute name="Codebase" value="*"/>
                <attribute name="Trusted-Only" value="true"/>
            </manifest>
        </jar>

        <!-- Pack and unpack JAR to normalize it -->
        <exec executable="pack200" logError="true" failonerror="true">
            <arg value="--quiet"/>
            <arg value="--repack"/>
            <arg value="@{jar}"/>
        </exec>

        <!-- Sign JAR -->
        <signjar keystore="mykeystore.p12" storetype="pkcs12" storepass="secret123" jar="@{jar}"
          alias="my key alias"/>

        <!-- Compress JAR -->
        <exec executable="pack200" logError="true" failonerror="true">
            <arg value="--quiet"/>
            <arg value="--modification-time=latest"/>
            <arg value="@{jar}.pack.gz"/>
            <arg value="@{jar}"/>
        </exec>
    </sequential>
</macrodef>
于 2015-11-30T18:09:34.417 回答