如何制作Ant任务来签署和打包我所有的JAR文件?

nev*_*ves 9 java compression ant code-signing pack

必须为webstart应用程序签署我的JAR文件.将它们打包以最小化下载时间会很不错.我正在尝试配置Ant任务以在部署应用程序期间自动执行此任务.由于pack进程重新组织jar内部结构使签名无效,因此Pack200文档建议采用3个步骤:

  1. 使用pack200重新打包JAR
  2. 用jarsigner签署JAR
  3. 使用pack200压缩JAR jar,生成.jar.pack.gz文件

Ant有一个默认的signjar任务,Sun发布了一个Pack200 ant任务.

问题是Sun pack200任务一次只能在一个文件上运行,重新包装操作必须指定一个输出文件.

我相信它应该是一个相当常见的操作,但我的蚂蚁文件变得过于复杂,并且有太多的临时文件.是时候乞求社区的智慧了:

是否有一种简单或至少是标准的方式来打包和签署我的所有JAR文件?

nev*_*ves 10

这是我自己的解决方案.我已经放弃了prebuild ant 目标,并决定直接运行pack200可执行文件.

这种方法有一些优点:

  • 它有效(jarsigner无法验证一些罐子)
  • 除了jdk之外没有依赖关系
  • 它不会花很多时间重新包装已经重新包装的罐子
  • 它可以内联签名和重新打包文件,允许我将签名版本置于版本控制之下.无需签署两次.

以下是重新打包和内联签名的宏代码:

<macrodef name="repack-and-sign">
    <attribute name ="rootdir"/>
    <sequential>
            <echo message="Repacking libs in @{rootdir}"/>
        <apply executable="pack200" parallel="false">
            <arg value="--repack"/> 
            <arg value="--segment-limit=-1"/> 
            <fileset dir="@{rootdir}" includes="**/*.jar" />
        </apply>

        <echo message="Signing libs in @{rootdir}"/>
        <signjar 
            alias="${keystore.alias}" keystore="${keystore.file}" storepass="${keystore.password}"
            lazy="true">
            <path>
                <fileset dir="@{rootdir}" includes="**/*.jar" />
            </path>
        </signjar>
     </sequential>
</macrodef>
Run Code Online (Sandbox Code Playgroud)

以下是如何打包:

    <apply executable="pack200" parallel="false" dest="${dir.tomcat.jar}">
        <arg value="--modification-time=latest"/>
        <arg value="--deflate-hint=true"/>
        <arg value="--segment-limit=-1"/>
        <targetfile/>
        <srcfile/>
        <fileset dir="${dir.tomcat.jar}" includes="**/*.jar" />
    <mapper type="glob" from="*" to="*.pack.gz" />
    </apply>
Run Code Online (Sandbox Code Playgroud)

编辑为那些不太了解蚂蚁的人提供更多信息:

上面的任务在你的标签之前.在你的标签内首先调用这样的宏,这样它首先重新包装并签署每个文件:

    <repack-and-sign rootdir="${dir.tomcat.jar}" />
Run Code Online (Sandbox Code Playgroud)

然后使用上面的标记.这将为每个文件进行最终打包.