ich habe in meinem Java-Projekt jede menge jars eingebunden. In meinem Ant-Buildscript kopiere ich alle automatisch in den Ordner /lib.
Wenn ich nun ein Script aufrufe, das mein Projekt aufruft muss ich immer als Classpath alle .jar dateien übergeben. geht das einfacher?
@Wildcard
ich habe eine Projekt-jar im /bin verzeichnis
die benötigten jar Subkomponenten liegen und /lib.
mein ant script liest vom Eclipse die .classpath vars aus und kopiert dann die Subkomponenten eben dahin.
Du meinst nun ich soll beim kopieren der Subkomponenten eine Ant Variable füllen, mit der ich anschliessend beim jar meines Projektes in die Manifest packe?
Wie funzt das mit dem ins Manifest packen von verbundenen Jar-files?
Vielleicht legst du nochmal ein wenig genauer dar, welche Dateien - insbesondere, welche Scripte - an deinem Projekt beteiligt sind.
Ein ant-build-Script ist ja nur eine Datei. Wenn du in dieser an der geeigneten Stelle deine jar-Libs einträgst, musst du doch nur diese eine Datei verändern, wenn eine neue jar-Datei hinzukommt.
Und wenn du von 20 .sh/.bat-Dateien sprichst: wenn nun die o.g. Variante aus welchem Grund auch immer nicht in Frage kommt, vielleicht baust du dir dann ein "wrapper-Script", in dem der classpath jeweils nur angepasst wird und dass dann die anderen Scripte aufruft. Den Namen könntest du ja per Parameter übergeben.
Die Optimierung von Java 6 kannte ich noch nicht, gut zu wissen.
Sonst: mit Google findet man eine Möglichkeit, über ein wenig Batch-Akrobatik (eine Schleife mit einer kleinen Helfer-Batch) das gleiche zu erreichen. Wer das Tool SQuirrelL verwendet, kann auch dort spicken.
Unter Unix ist das ja eh kein Thema.
Ich lese mir alle BuildPath-libs ein und baue daraus den Classpath zum kompilieren.
danach packe ich mir nur noch das Jar zusammen.
Wenn ich das nun richtig verstanden habe, kann ich den classpath, den ich zum kompilieren nutze auch ins Jar schreiben und es werden automatisch die Libs mit herangezogen, wenn ich MyJar einbinde....
Richtig?
Wie funzt des denn dann?
Wenn man bei ANT automatisch alle JARs aus einem lib Verzeichnis einbinden will kann man die <path> und <manifestclasspath> Einstellungen von ANT verwenden, auf ein manuelles Konvertieren des Eclipse .classpath wuerde ich verzichten.
Ich sehe gerade das das doch nciht so ganz funktioniert!
Ich kann nicht die im classpath stehenden libs einbinden!
Mein Antscript kopiert mehrere jar-Files zusammen in meinen build/lib ordner. Diese Ordner muss ich nun alle in die MANIFEST.MF
als classpath bekommen.
Also am besten im ANT-target den Ordner lib durchgehen und alle Inhalte mit Semikolon getrennt als classpath in die MANIFEST schreiben.
Funktioniert das anschliessend auch unter Linux?
Dort ist das Trennzeichen ja nicht ; sondern : !!
? Die Manifest-File sollte OS unabhängig sein. Hast du mal in der DOKU zu Manifest.mf angeschaut was dazu drin steht (hab selbst noch nicht so viel mit Manifests zu tun gehabt).
in der Zeile: <manifestclasspath property="jar.classpath" jarfile="${jar.file}">
wird mir ein Fehler geworfen: java.lang.NoSuchMethodError: org.apache.tools.ant.launch.Locator.encodeURI(Ljava/lang/StringLjava/lang/String;
Die jarfile existiert natürlich noch nicht.
Ich habe dazu im Internet folgendes gefunden:
the filename for the Jar which will contain the manifest that will use the property this task will set. This file need not exist yet, but its parent directory must exist.
Der Ordner ist jedoch vorhande, somit müsste es doch funktionieren.
:EDIT:
Muss der Pfad relativ angegeben werden?
ich würde es begrüßen, wenns auch irgendwie absolut funktionieren würde..