Witam
Na początku chciałem zaznaczyć, że próbowałem szukać rozwiązania mojego problemu na różnych forach,
ale nic co udało mi się znaleźć nie działało w moim przypadku.
Mój problem jest następujący: Piszę projekt w Javie i chciałbym zapisać rozwiązanie w postaci pojedynczego archiwum JAR. Mój projekt korzysta z kilku zewnętrznych bibliotek a kompilację wykonuję za pomocą Ant'a.
(To jest pierwszy projekt jaki kompiluję przy użyciu Anta, więc proszę o wyrozumiałość).
Na chwilę obecną umiem stworzyć JARa, który można uruchomić jedynie wtedy, gdy w katalogu go zawierającym znajdują się wspomniane już biblioteki.
Umiem też wrzucić te dodatkowe biblioteki JAR do wynikowego archiwum, ale nie umiem ustawić atrybutu Class-Path tak, aby wskazywał biblioteki zawarte w uruchamianym archiwum JAR.
Poniżej prezentuję fragment mojego pliku build.xml .
<path id="classpath">
<fileset dir="${lib.dir}">
<include name="${cup.jar}" />
<include name="${commons.jar}" />
</fileset>
<fileset dir="${res.dir}">
<include name="${predef}" />
</fileset>
</path>
<manifestclasspath property="lib.list"
jarfile="${jar.dir}/${ant.project.name}.jar">
<classpath refid="classpath" />
</manifestclasspath>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}" />
<jar jarfile="${jar.dir}/${ant.project.name}.jar" basedir="${bin.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}" />
<attribute name="Class-Path" value="${lib.list}" />
</manifest>
</jar>
<copy todir="${jar.dir}">
<fileset dir="${lib.dir}" includes="${cup.jar}" />
<fileset dir="${lib.dir}" includes="${commons.jar}" />
<fileset dir="${res.dir}" includes="${predef}" />
</copy>
</target>
Powyższy kod powoduje tylko stworzenie wynikowego JARa np. MyProject.jar , który w Manifest ma ustawione
Main-Class: com.mypkg.Main
Class-Path: ../lib/commons-lang3-3.1.jar ../lib/java-cup-11a.jar ../res/PredefinedFunctions.j
Byłbym bardzo wdzięczny za pomoc w napisaniu przykładowego pliku build.xml dla takiego uproszczonego przypadku:
Główny katalog zawiera:
build.xml
/src - Powiedzmy, że jedyny plik źródłowy to /src/com/mypkg/Main.java
/bin - Jedyny plik po skompilowaniu /bin/com/mypkg/Main.class
/lib - Zawiera 2 pliki /lib/ext1.jar i /lib/ext2.jar
/jar - W tym katalogu chciałbym zapisać wynikowe archiwum MyProject.jar o następującej strukturze:
+ META-INF
- MANIFEST.MF (Class-Path ustawione na te pliki ext?.jar)
+ com
+ mypkg
- Main.class
- ext1.jar
- ext2.jar
Życzę Wesołych Świąt i z góry dziękuję za pomoc.
Aquagen