【问题标题】:Using pack200 on signed jar file在签名的 jar 文件上使用 pack200
【发布时间】:2015-01-09 06:01:35
【问题描述】:

我有一个大小约为 45MB 的 jar 文件。我使用 Pack200 压缩 jar 文件,然后使用 3rd 方证书对其进行签名,如下所示:

pack200 --repack a.jar    
jarsigner  a.jar  ... ..    
pack200 a.jar.pack.gz a.jar

使用上述导致错误如下(在启动应用程序时)

jarsigner: java.lang.SecurityException: SHA1 digest error for xyz.class

我需要使用 pack200 压缩,因为它会在很大程度上减少 jar 的下载时间(打包压缩后 jar 大小减少到 ~11MBs 到 ~45MBs)。

请帮忙。
我是 using java7u60 作为运行时环境和 JNLP 来启动 JAR 文件。
很高兴提供更多所需的信息。

【问题讨论】:

标签: java jar jarsigner


【解决方案1】:

我已经找到解决办法了……

Followiong 是我为 pack200 使用/创建的 ant 脚本

<project name="ui-patch-create" default="forloop">

<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
<taskdef name="pack200" classname="com.sun.tools.apache.ant.pack200.Pack200Task" classpath="C:\Jarsigner\Pack200Task.jar"/>

    <description>UI Patch Creation</description>
    <property name="product.name" value="some product name"/>
    <property name="dest.path" value="C:\Jarsigner\dest"/>
    <property name="source.path" value="C:\Jarsigner"/>
    <property name="keystore" value="C:\Jarsigner\keystore\locationtokeystore"/>

    <target name="forloop">
        <foreach target= "CreateJAR" param="JAR-File">
            <fileset dir="${dest.path}" casesensitive="yes">
            </fileset> 
        </foreach>
    </target>

    <target name="CreateJAR">
        <echo message="${JAR-File}"/>
            <basename property="dir.name" file="${JAR-File}"/>  
                <echo message="${dir.name}"/>
                    <antcall target="Build-JAR">
                        <param name="param1" value="${dir.name}"/>
                    </antcall>
    </target>

    <target name="Build-JAR" depends="update-ui-jar,repack-jar, sign-jar, gzip-jar">
        <echo>
            Building the .jar file.
        </echo>
    </target>

<!-- Update ${JAR-File} file -->
    <target name="update-ui-jar">
        <unzip src="${dest.path}\${dir.name}" dest="${dest.path}\test">
            <patternset>
                <include name="**/MANIFEST.MF"/>
            </patternset>
        </unzip>

        <!-- meta-inf changes for supporting JAVA 7U45 and above...-->
        <manifest file="${dest.path}\test\META-INF\MANIFEST.MF" mode="update">
            <attribute name="Application-Name" value="Vendor Name"/>
            <attribute name="Codebase" value="*"/>
            <attribute name="Permissions" value="all-permissions"/>
            <attribute name="Trusted-Library" value="true"/>
            <attribute name="Caller-Allowable-Codebase" value="*"/>
        </manifest>

        <jar update="true" manifest="${dest.path}\test\META-INF\MANIFEST.MF" jarfile="${dest.path}\${dir.name}" basedir="${dest.path}\test" />
    </target>


<!-- Pack200 repack UI Jar File -->
    <target name="repack-jar" depends="update-ui-jar" description="applying pack200 --repack on jar ${dir.name}">
    <mkdir dir="${source.path}/repackedjars"/>
        <pack200 src="${dest.path}\${dir.name}" destfile="${source.path}/repackedjars/${dir.name}" repack="true" 
        segmentlimit="-1" stripdebug="false" deflatehint="keep" unknownattribute="pass" keepfileorder="true"/>
    </target>


<!-- Sign the UI Jar File -->
    <target name="sign-jar" depends="repack-jar">
        <echo message="${dir.name}"/>
            <signjar jar="${source.path}\repackedjars\${dir.name}" alias="xxxWS" keystore="${keystore}" storepass="storepass" keypass="xxxxxx" signedjar="${source.path}\signed\${dir.name}"/>
    </target>


    <!-- Pack200 to gzip UI Jar File -->
    <target name="gzip-jar" depends="sign-jar" description="applying gzip on jar ${dir.name}">
    <mkdir dir="${source.path}/finaljars"/>
        <pack200 src="${source.path}\signed\${dir.name}" destfile="${source.path}/finaljars/${dir.name}.pack.gz" gzipoutput="true"/>
    </target>

</project>

请注意,antcontrin 和 pack200 任务需要在使用 this 脚本之前下载,并且 ant 脚本只能在以前未签名的 jar 上执行。

【讨论】:

    【解决方案2】:

    你可以尝试添加 --segment-limit=-1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 2020-01-16
      相关资源
      最近更新 更多