En el siguiente archivo de compilación, el destino de jar se refiere a la propiedad jar.class.path para la clase-ruta de manifiesto. El objetivo de compilación se refiere a project.class.pathGenerar la ruta de clase de manifiesto desde <classpath> en Ant
Aquí hay redundancia, porque jar.class.path y project.class.path son muy similares. Deben actualizarse cuando se agregan bibliotecas, lo que puede ser complicado si la lista de bibliotecas es muy larga. ¿Hay una mejor manera? Cualquier solución debe ser multiplataforma y usar siempre rutas relativas.
Editar:
Debe generar el classpath JAR de un conjunto de archivos y no al revés, así que puedo usar comodines para, p. incluir todos los archivos JAR en un directorio.
<?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>
Esto funciona, pero solo si no tienes rutas absolutas en tu ruta de clase. Por ejemplo, si está utilizando el paquete Debian 'libhibernate3-java' que se instala en'/usr/share/java/hibernate3.jar' y lo incluye en su classpath, la tarea ant antiguedades classp lanzará un error. Sin embargo, la solución de Qianjigui aún funciona. – joscarsson