2012-06-21 5 views
5

ich eine Batch-Datei „run.bat“ erstellt haben:wie alle JAR-Dateien in einem Verzeichnis in meiner Batch-Datei verweisen

set CLASSPATH=%CLASSPATH%.;.\Jars\app.jar;.\Jars\a.jar;.\Jars\b.jar;.\Jars\c.jar;.\Jars\d.jar; 
java mypackage.mysubpackage.Start 
pause 

ich alle Klassendateien im Zusammenhang mit meiner Anwendung in „app gehalten haben .jar "und Start ist die Klasse, von der aus die Anwendung ausgeführt wird. Ich habe diese "run.bat" -Datei und alle Gläser, die meine "app.jar" im selben Verzeichnis beziehen möchte.
Ich habe alle diese Gläser im "Jars" -Ordner behalten und in meiner "run.bat" -Datei darauf verwiesen, wie oben gezeigt. Um jedoch auf jede einzelne JAR-Datei durch meine "run.bat" verweisen zu können, muss ich den Pfad als ". \ Jars \ jarname.jar" angeben. Wenn ich ". \ Jars \ *. Jar" verwende, werden die Jars nicht mit "run.bat" bezeichnet. Kann jemand dafür eine Alternative zur Verfügung stellen?

+1

ich denke, dass hier Sie Finde noch ein paar Hinweise http://stackoverflow.com/questions/1914493/add-jar-file-to-buildpath-in-windows-command-line – BigMike

+0

und übrigens, gute alte Windows-Batch-FOR-Befehl kann auch nützlich sein (siehe http://stackoverflow.com/questions/180741/how-to-do-something-to-each-file-in-a-directory-with-a-batch-script) – BigMike

+0

@BigMike guter Punkt über die Java-Version . In Linux-Systemen ist es aufgrund der Dateinamenerweiterung weniger problematisch. Nicht sicher Windows tut auch einige Erweiterung +1 – Morfic

Antwort

2

Eigentlich haben Sie nur die Hälfte der Arbeit mit * .jar gemacht. Sie müssen sie auch als Klassenpfad an Java übergeben: java -cp $CLASSPATH mypackage.mysubpackage.Start. (auf Windows Ich denke, die Verwendung einer Variablen in einem Skript ist% CLASSPATH%)

Später bearbeiten: werfen Sie einen Blick auf BigMike Kommentare zu Ihrer Frage. Wenn Sie eine Java-Version < 1.6 verwenden, müssen Sie möglicherweise eine Schleife verwenden, um einen vollständigen% CLASSPATH% einschließlich des vollständigen Namens jedes JARs zu erstellen, da ich vermute, dass die Shell von Windows expansions nicht wie * nix tut Systeme.

+0

Java liest die% CLASSPATH% Umgebungsvariable sowieso, nicht wahr? – trojanfoe

+1

Sie haben Recht, es sollte automatisch gelesen werden.Da das Festlegen des Klassenpfads jedoch schwierig sein kann, wird empfohlen, die Option 'java -cp' zu verwenden. Auf diese Weise können Sie den Klassenpfad auch für jede Ihrer Anwendungen einzeln festlegen, ohne dass sich dies auf die übrigen vorhandenen Anwendungen auswirkt, während das Ändern der Umgebungsvariablen globale Auswirkungen hat. – Morfic

+0

zustimmen mit Grove, mess mit env Variablen unter Windows kann ein großer Schmerz sein (aaah ich vermisse gute alte autoexec.bat) – BigMike

2

Sie können versuchen, for loop zu verwenden, um einen Klassenpfad im Stapel zu erstellen, z. B. den folgenden.

@echo off 
for %%jar in (.\Jars\*.jar) do call :add_jar %%jar 

java -cp %CLASSPATH%;%JARS% mypackage.mysubpackage.Start 
pause 

exit /b 

:add_jar 
set JARS=%JARS%;%1 
exit /b 
+1

+1 für FOR Befehl;) – BigMike

+0

+1: @ guanxiaohua2k6, sollten Sie ein zusätzliches ' exit/b 'nach der Pause, um zu vermeiden, daß das' add_jar'-Unterprogramm nach dem Beenden der 'for'-Schleife eintritt. –

+0

OK, danke. Ich habe es hinzugefügt. – guanxiaohua2k6

1

Sie könnten versuchen, etwas, das http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html in dem unten angegebenen Link wird

Legendes Klasse Wegabschnitt Wildcards:

„Ein Eintrag Klassenpfad, der * enthält, wird zu nicht-Klassendateien anzeigen lassen. Passen Sie sowohl Klassen als auch JAR-Dateien in einem einzigen Verzeichnis foo an, verwenden Sie entweder foo; foo/* oder foo/; foo. Die gewählte Reihenfolge bestimmt, ob die Klassen und Ressourcen in foo vor JAR-Dateien in foo geladen werden oder umgekehrt Unterverzeichnisse a nicht rekursiv recherchiert. Zum Beispiel foo/ sucht nach JAR-Dateien nur in foo, nicht in foo/bar, foo/baz usw.“

Also in Ihrem Fall sollten Sie tun:

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\* 

und nicht

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\*.jar 

sofern alle Gläser benötigen Sie sind in. \ Jars Ordner

Verwandte Themen