ANT Script f. Eclipse

nes

Grünschnabel
Hallo allseits,

ich kämpfe schon einige Zeit mit folgendem Problem rum: Ich hätte gerne einen ANT-Script, der mein Auslieferungsverzeichnis .\dist möglichst "vollständig" befüllt. Das heisst also insbesonders auch alle für ein Projekt notwendigen JAR's hineinkopiert.

Ich hab in Eclipse diverse Libraries definiert, meinetwegen eine welche LOG4J heisst, und auf den psysikalischen Pfad \irgendwas\log4j.jar verweist. Diese Libraries werden in Eclipse über Projekt->Properties->Java Build Path->Librariers dem jeweiligen Projekt zugewiesen.

Um das jeweilige Projekt ausliefern zu können, hab ich einen ANT-Tasks, der mir das Projekt-JAR im 'dist'-Verzeichnis erzeugt, so weit so gut. Allerdings muss ich danach immer daran denken, alle weiteren JAR's die ich sonst noch benötige, händisch in dieses Verzeichnis zu kopieren.

Soweit ich weiss wäre der 'normale' Weg, alle benötigten JARs vorher in ein Verzeichnis Namens "lib" zu kopieren, den ClassPath nur auf dieses Verzeichnis zu setzen, dann hat man alles beinand. Nur geht das bei uns nicht so einfach, da sich div. JARs durch andere Abteilungen ändern/ausgetauscht werden.

Es muss doch auch einen Weg geben, auf den gerade aktuellen ClassPath zuzugreifen, und die benötigten JARs egal wo sie liegen in das DIST-Verzeichnis zu kopieren? Wie? :-)

Hier ein Ausschnitt meines derzeitigen ANT-Scripts:

Code:
<target name="deploy" depends="init" description="generate the distribution">

    <property name="dist"		location="dist" />
    <property name="build" 		location="bin" />
    <property name="jarfile"	location="${dist}/${ant.project.name}.jar" />

    <!-- Create the distribution directory -->
    <mkdir dir="${dist}/" />

    <!-- copy all files from etc -->
    <mkdir dir="${dist}/etc"/>
    <copy todir="${dist}/etc" >
        <fileset dir="${etc}"></fileset>
    </copy>

    <tstamp>
        <format property="creationdate" pattern="yyyy-MM-dd HH:mm:ss" locale="de"
       	                          offset="1" unit="hour"/>
    </tstamp> 

    <delete file="${jarfile}" />
    <jar jarfile="${jarfile}" 
          basedir="${build}"
          manifest="MANIFEST.MF">
    </jar>
</target>

lg., nes
 
Hallo!

Schau dir mal Ivy an:
http://www.jayasoft.org/ivy
Ivy ist ein Dependency Manager der auch in einen Ant build integriert werden kann. Du configurierst in Ivy einmal deine Abhängigkeiten und bei einem Build sicht sich Ivy die entsprechenden jars von den angegebenen Quellen selbst zusammen.

Eine andere Alternative wäre beispielsweise Eclipse Buckminister welches sich auch um genau dieses Problem zur Buildzeit kümmer ;-)
http://wiki.eclipse.org/index.php/Buckminster

Gruß Tom
 
Falls jemand ähnliche Probleme hat ...

Ich hab' jetzt etwas gefunden, was meine Anforderungen noch viel einfacher abdeckt, und zwar ein Eclipse-Plugin mit dem überhaupt keine zusätzlichen JARs ausgeliefert werden müssen, mittels einem inkludiertem Class-Loader werden Jars in Jars richtig behandelt, die entsprechenden Jars werden zum Compilierungszeitpunkt geholt, egal von wo ... sieht alles sehr vielversprechend aus:

http://fjep.sourceforge.net/

Wie einfach das in der Anwendung ist sieht man hier: http://fjep.sourceforge.net/fjeptutorial.html

Jars, External-Jars, User-Libraries, System-Libraries, Classes-Folders and Project-Exports werden unterstützt, man kann in das eportierte sogenannte "Fat-Jar" auch das Manifest sowie eigene Verzeichnise und Files exportieren ... perfekt. :)

lg., nes
 
Hallo!

Das FatJar Plugin packt einfach alle abhängigen Jars aus und baut daraus dann ein einziges "fettes" Jar das die eigenen Klassen und die der Third-Party libs enthält... insofern lieferst du schon noch die Libs aus eben nur in anderer Form.

Gruß Tom
 
Hallo Thomas!

Ja, schon klar daß es genau das tut. Vielleicht hab ich mich da auch einfach etwas unklar ausgedrückt, ich brauch ja auch nur den Stand der eingebundenen Libs zum Erstellungszeitpunkt des fertigen Programmes.

Ich versuch's nochmals, besser zu erklären ;-)

Ich habe im Eclipse eine Bibliothek namens eigene_klassen_aus_abteilung_xyz welche auf ein JAR im Netzlaufwerk verweist. Dieses Jar wird u.U. während ich noch entwickle auch schon mal geändert, und zwar nicht durch mich.

Wenn ich jetzt mit der Entwicklung fertig bin, baue ich die fertige Auslieferung, und darf nicht vergessen, den gerade aktuellen Stand von "eigene_klassen_aus_abteilung_xyz.jar" dazuzukopieren.

Und genau das war mein Problem. Und mit dem FatJar-Plugin kann ich genau das lösen, ohne daß ich mich weiter darum kümmern muss. Das holt sich die benötigten Klassen im gerade aktuellen Stand (!) aus den Jar's der Netzlaufwerke, ich kann nicht mehr darauf vergessen. ;-)

lg., nes
 
Zurück