Hi,
Signing jar files for the purpose of making a webstart-able java app that can use ‘all permissions’ is a pain in the butt. Most of you probably already have some automatic utility that does the jar signing but I didn’t and just spent hours figuring it out so I wanted to share it with other n00bs
This Ant build code snippet will generate a keystore file, then finds all jars in the ‘dist’ directory and copies them into the ‘distSigned’ directory where they will be signed with the keystore.
It works for me in Netbeans and should work for Eclipse etc too since it also uses Ant as far as i know.
<!-- Custom build script that makes a keystore, finds all jars in the 'dist' directory and copies them into the 'distSigned' directory where they will be signed with the keystore. -->
<!-- Insert this code in your project's build.xml file just before the </project> tag. -->
<target name="-post-jar">
<property name="aliasName" value="Keith"/>
<property name="password" value="password"/>
<property name="keystoreFileName" location="keystoreFileName.ks"/>
<property name="firstNameSurName" value="Keith Woodward"/>
<property name="organisationUnitOrDepartment" value=""/>
<property name="organisationName" value=""/>
<property name="cityOrLocality" value="Sydney"/>
<property name="stateOrProvince" value="NSW"/>
<property name="twoLetterJavaLocaleCountryCode" value="AU"/>
<delete file="${keystoreFileName}" failonerror="false" />
<genkey alias="${aliasName}" storepass="${password}" keystore="${keystoreFileName}">
<dname>
<param name="CN" value="${firstNameSurName}"/>
<param name="OU" value="${organisationUnitOrDepartment}"/>
<param name="O" value="${organisationName}"/>
<param name="L" value="${cityOrLocality}"/>
<param name="ST" value="${stateOrProvince}"/>
<param name="C" value="${twoLetterJavaLocaleCountryCode}"/>
</dname>
</genkey>
<delete dir="distSigned" failonerror="false" />
<mkdir dir="distSigned" />
<signjar destDir="distSigned"
alias="${aliasName}" keystore="${keystoreFileName}"
storepass="${password}"
preservelastmodified="true">
<path>
<fileset dir="dist" includes="*.jar" />
</path>
<flattenmapper />
</signjar>
<mkdir dir="distSigned/lib" />
<signjar destDir="distSigned/lib"
alias="${aliasName}" keystore="${keystoreFileName}"
storepass="${password}"
preservelastmodified="true">
<path>
<fileset dir="dist/lib" includes="*.jar" />
</path>
<flattenmapper />
</signjar>
</target>
Just change the property values to what you want, for example, change:
<property name="aliasName" value="Keith"/>
to
<property name="aliasName" value="YourName"/>
If anyone has any improvements I’d be very interested 8)
PS: thanks to krasse, AlanW and ra4king for their tips here: http://www.java-gaming.org/index.php?topic=23891.0