tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
4310
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    nes nes ist offline Rookie
    Registriert seit
    Aug 2005
    Beiträge
    9
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    <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
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    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
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    nes nes ist offline Rookie
    Registriert seit
    Aug 2005
    Beiträge
    9
    Zitat Zitat von Thomas Darimont Beitrag anzeigen
    Schau dir mal Ivy an:
    http://www.jayasoft.org/ivy
    Herzlichen Dank, dürfte genau das sein was ich brauche!

    lg., nes
     

  4. #4
    nes nes ist offline Rookie
    Registriert seit
    Aug 2005
    Beiträge
    9
    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
     

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    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
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  6. #6
    nes nes ist offline Rookie
    Registriert seit
    Aug 2005
    Beiträge
    9
    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
     

Ähnliche Themen

  1. [Eclipse] Datei über Kommandozeile in Eclipse öffnen
    Von Thomas Darimont im Forum Java
    Antworten: 0
    Letzter Beitrag: 11.06.10, 00:28
  2. Antworten: 0
    Letzter Beitrag: 11.05.09, 12:46
  3. Antworten: 5
    Letzter Beitrag: 02.11.07, 09:37
  4. Eclipse basierte JSF Tools / Eclipse Visual JSF Page Designer
    Von Thomas Darimont im Forum Java Technology News
    Antworten: 0
    Letzter Beitrag: 07.03.07, 00:20
  5. Antworten: 0
    Letzter Beitrag: 23.11.06, 23:34