W poniższym zbiorze plik docelowy jar odnosi się do właściwości jar.class.path w manifeście path klasy. Cel kompilacji odnosi się do projektu.class.pathGenerowanie ścieżki klasy manifestu od <classpath> w Ant
Tutaj jest nadmiarowość, ponieważ jar.class.path i project.class.path są bardzo podobne. Muszą one być aktualizowane zarówno po dodaniu bibliotek, co może być uciążliwe, jeśli lista bibliotek jest bardzo długa. Czy istnieje lepszy sposób? Każde rozwiązanie musi być wieloplatformowe i zawsze używać względnych ścieżek.
Edycja:
Powinna generować ścieżkę klasy JAR z zestawu plików, a nie odwrotnie, więc mogę używać symboli wieloznacznych do np. dołącz wszystkie pliki JAR do katalogu.
<?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>
Działa to, ale tylko wtedy, gdy nie masz bezwzględnych ścieżek w ścieżce klas. Na przykład, jeśli używasz pakietu debian 'libhibernate3-java', który instaluje się w'/usr/share/java/hibernate3.jar' i włączasz go do swojej ścieżki klasy, zadanie anta manifestclasspath wyświetli błąd. Rozwiązanie Qianjigui nadal działa. – joscarsson