java - 如何使 Ant 任务对我的所有 JAR 文件进行签名和打包?

标签 java ant compression code-signing pack

我的 JAR 文件必须为 webstart 应用程序签名。最好也将它们打包以最大程度地减少下载时间。我正在尝试将 Ant 任务配置为在应用程序部署期间自动执行。由于打包过程重组了使签名无效的 jar 内部结构,Pack200 documentation推荐 3 个步骤:

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

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

问题是 Sun pack200 任务一次只对一个文件进行操作,重新打包操作必须指定一个输出文件。

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

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

最佳答案

这是我自己的解决方案。我已经丢弃了预构建 ant targets , 并决定直接运行 pack200 可执行文件。

这种方法有一些优点:

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

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

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

这里是如何打包:

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

编辑为不太了解 ant 的人提供更多信息:

上述任务在您的标签之前进行。在您的标签内,首先像这样调用宏,以便它首先重新打包并签署每个文件:

    <repack-and-sign rootdir="${dir.tomcat.jar}" />

然后用上面的标签跟随它。这将为每个文件进行最终打包。

关于java - 如何使 Ant 任务对我的所有 JAR 文件进行签名和打包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3312401/

相关文章:

java - tomcat.dbcp...无法为连接 URL '' 创建类 'null' 的 JDBC 驱动程序

javascript - 压缩 HTML - 元素?

java - 如何使用 python zlib 压缩文本并使用 java zlib 解压缩?

java - JAXB 中的 XML 字符串

java - 如何在java中跳过打印 "if"

ant - 使用 Ant 的不同操作系统上的不同目标

Java 异常堆栈被抑制 - 如何打印出整个堆栈?

sql - ANT sql 任务 : How to run SQL and PL/SQL and notice execution failure?

c++ - 在NTFS压缩目录中,如何读取文件压缩和未压缩的大小?

java - 设置 Apache POI 时遇到问题