如何在签名后更改jar文件的名称--Apache ANT

时间:2013-12-10 09:55:32

标签: java ant jar

我使用以下蚂蚁命令签署我的罐子。

<signjar alias="${alias}" keypass="${keypass}" 
            storepass="${storepass}" 
            keystore="${keystorefile}" 
            signedjar="${dist.dir}/${jar.signed.fileName}" 
            lazy="true">
            <fileset dir="${dist.dir}">
                <include name="*.jar" />
                <include name="lib/*.jar" />
            </fileset>
        </signjar>

对于单个文件,我可以在签名后更改jars文件的名称, 但是当我有多个罐子时,上面的线条没用,我想要完成的是,

例如

如果未签名的jar文件名为ab.jar after signing it I want to prepend签名_ to it's name like Signed_ab.jar`,依此类推我在文件集中的所有jar文件。

谁能告诉我怎么做?

3 个答案:

答案 0 :(得分:0)

您可以在构建脚本中使用如下所示的ant jar命令/任务:

<jar basedir="bin" destfile="Signed_${jar-name}.jar">
不过,你错过了在你的问题中输入你正在使用的命令。

答案 1 :(得分:0)

signjar任务可以使用mapper定义如何将输入文件名转换为输出文件名:

<signjar alias="${alias}" keypass="${keypass}" 
            storepass="${storepass}" 
            keystore="${keystorefile}" 
            destdir="${dist.dir}"
            lazy="true">
    <fileset dir="${dist.dir}">
        <include name="*.jar" />
        <include name="lib/*.jar" />
        <!-- since we're dumping signed JARs in the same dir as the source
             ones, we need to prevent already-signed JARs from being signed
             again.  A better approach might be to put the Signed_* JARs in
             a different directory -->
        <exclude name="**/Signed_*" />
    </fileset>
    <regexpmapper handledirsep="yes"
                  from="^(.*?)/([^/]*)$$" to="\1/Signed_\2" />
</signjar>

答案 2 :(得分:0)

可能你可以写几个宏&amp;为要为其签名的每个目录调用'signJarsParallel'宏一次。

这不是经过测试的代码。你可以尝试一下。它平行地使用运行任务。因此提高速度&amp;标记为您想要的临时前缀名称:

<macrodef name="signMyJars">
<element name="myJar" implicit="true"/>
<sequential>
    <signjar alias="${alias}" keypass="${keypass}"
             storepass="${storepass}"
             keystore="${keystorefile}"
             lazy="true">
        <myJar/>
    </signjar>
</sequential>
</macrodef>

仅在蚂蚁目标内的宏下方调用。

<macrodef name="signJarsParallel">
<attribute name="dirName"/>
<sequential>
    <for param="file" parallel="true" threadCount="5">
        <path>
            <fileset dir="@{dirName}">
                <include name="*.jar"/>
                <include name="lib/*.jar"/>
            </fileset>
        </path>
        <signMyJars>
            <fileset file="Signed_@{file}.jar"/>
        </signMyJars>
    </for>

</sequential>
</macrodef>