Nel file di build di seguito, la destinazione jar fa riferimento alla proprietà jar.class.path per il percorso classe manifest. L'obiettivo di compilazione si riferisce a project.class.pathGenera percorso classe manifest da <classpath> in Ant
C'è una ridondanza qui, perché jar.class.path e project.class.path sono molto simili. Devono essere entrambi aggiornati quando vengono aggiunte le librerie, il che può essere un problema se l'elenco delle librerie diventa molto lungo. C'è un modo migliore? Qualsiasi soluzione deve essere multipiattaforma e utilizzare sempre percorsi relativi.
Modifica:
Dovrebbe generare il classpath JAR da un set di file e non viceversa, quindi è possibile utilizzare i caratteri jolly ad es. includere tutti i file JAR in una directory.
<?xml version="1.0"?>
<project name="Higgins" default="jar" basedir=".">
<property name="jar.class.path" value="lib/forms-1.2.0.jar lib/BrowserLauncher.jar"/>
<path id="project.class.path">
<pathelement location="build"/>
<fileset dir="lib">
<include name="forms-1.2.0.jar"/>
<include name="BrowserLauncher.jar"/>
</fileset>
</path>
<target name="prepare">
<mkdir dir="build"/>
</target>
<target name="compile" depends="prepare" description="Compile core sources">
<javac srcdir="src"
includes="**"
destdir="build"
debug="true"
source="1.5">
<classpath refid="project.class.path"/>
</javac>
</target>
<target name="jar" depends="compile" description="Generates executable jar file">
<jar jarfile="higgins.jar">
<manifest>
<attribute name="Main-Class" value="nl.helixsoft.higgins.Main"/>
<attribute name="Class-Path" value="${jar.class.path}"/>
</manifest>
<fileset dir="build" includes="**/*.class"/>
<fileset dir="src" includes="**/*.properties"/>
</jar>
</target>
</project>
Questo funziona, ma solo se non si hanno percorsi assoluti nel classpath. Ad esempio, se si sta utilizzando il pacchetto debian 'libhibernate3-java' che installa in'/usr/share/java/hibernate3.jar' e lo includi nel classpath, l'attività ant manifest manifesterà un errore. La soluzione di Qianjigui funziona comunque. – joscarsson