gpt4 book ai didi

java - 在签名的 jar 文件上使用 pack200

转载 作者:行者123 更新时间:2023-12-01 06:23:43 24 4
gpt4 key购买 nike

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

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 大小减少到 ~11MB,约为 45MB)。

请帮忙解决这个问题。
使用 java7u60 作为运行时环境和 JNLP 来启动 JAR 文件。
很高兴提供所需的更多信息。

最佳答案

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

以下是我为 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>

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

关于java - 在签名的 jar 文件上使用 pack200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27854716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com