In general packing and unpacking a JAR changes its binary representation which breaks any signature that has been used to sign the initial JAR. It is possible to "normalize" a JAR by packing and unpacking it again so that any signature applied to the "normalized" JAR will stay valid during another pack/unpack cycle. See Pack200.Packer's javadocs for more details.
This task can be used to normalize a JAR in-place or to create a
new normalized JAR separate from the original JAR. The later
allows you to run <jar>
and <pack200normalize>
in succession and the
"normalization" step wouldn't do anything unless the original jar
changed.
If you want to normalize the JAR in-place, you must set the force attribute to true as any file will always be up-to-date when compared to itself.
Attribute | Description | Required |
srcfile | the file to normalize. | Yes. |
destfile | the normalized archive. | No, defaults to the srcfile. |
force | Whether to normalize the archive even if the destfile seems up-to-date. | No, defaults to false |
Sets a property for the packer (see the Pack200 javadocs for details).
Note this task implicitly sets the segment limit to -1.
Attribute | Description | Required |
key | Name of the property. | Yes. |
value | Value of the property. | Yes. |
<cmp:pack200normalize destfile="foo-normalized.jar" xmlns:cmp="antlib:org.apache.ant.compress" srcfile="foo.jar"> <property key="pack.effort" value="9"/> </cmp:pack200normalize>
Normalizes foo.jar where foo-normalized.jar is the normalized archive. As both the normalization step and the actual packing must use the same parameters the normalization prepares for better compression results by using above than normal effort.
<cmp:pack200normalize force="true" xmlns:cmp="antlib:org.apache.ant.compress" srcfile="foo.jar"/>
Normalizes foo.jar in-place.