webentwicklung-frage-antwort-db.com.de

Java Kommandozeile mit externer .jar

Ich entwickle ein Projekt mit .jar, um Code wiederzuverwenden.

Also habe ich auf .jar den Namen TOOLS.jar und entwickle eine einfache Anwendung in der Datei HelloWorld.Java, die auf mein Paket TOOLS aus TOOLS.jar verweist

Ich kompiliere mit dieser Kommandozeile:

javac -g -d C:\MyApp -cp TOOLS.jar HelloWorld.Java

Es ist erfolgreich, und wenn ich meine Anwendung ausführen möchte, verwende ich diesen Befehl (ich befinde mich im Ordner C:\MyApp):

Java -cp <path>\TOOLS.jar;. HelloWorld

Es ist erfolgreich, aber meine Frage ist:

Wie führe ich meine Anwendung aus, wenn ich mehrere externe .jar-Dateien habe?

Muss ich jeden Befehl mit der Option -cp hinzufügen?

Gibt es eine Möglichkeit, nur eine Binärdatei zu generieren und auszuführen (als .exe mit C-Programmen)?

25
TheFrancisOne

Verketten Sie jedes Argument der JAR-Datei mit cp:

; on Windows
: on Linux or Mac

z.B.

Java -cp <path>\TOOLS.jar;.;<path>\jar2.jar;<path>\jar3.jar HelloWorld

bei neueren JVMs (6+, glaube ich) können Sie auch das * verwenden, um alle JARs in einem Verzeichnis anzuhängen, z.

Java -cp .;<path>\*; HelloWorld

Um einen Schritt weiter zu gehen und eine einzelne ausführbare Datei zu erstellen, lesen Sie diese Frage .

40
Joel

Wenn Sie viele JAR-Dateien in einem Ordner haben und diese nicht manuell an den Klassenpfad anhängen möchten. Du kannst dir eine .bat unter Windows oder eine Shell unter Linux zulegen.

cpappend.bat von Tomcat

rem ---------------------------------------------------------------------------
rem Append to CLASSPATH
rem
rem $Id: cpappend.bat 301115 2002-08-04 18:19:43Z patrickl $
rem ---------------------------------------------------------------------------

rem Process the first argument
if ""%1"" == """" goto end
set CLASSPATH=%CLASSPATH%;%1
shift

rem Process the remaining arguments
:setArgs
if ""%1"" == """" goto doneSetArgs
set CLASSPATH=%CLASSPATH% %1
shift
goto setArgs
:doneSetArgs
:end

Und noch eine bat-Datei, die "for" -Anweisung verwendet, um die gesamte jar-Datei an classpath anzuhängen

set CURRENT_DIR=%cd%
set CLASSPATH=.
for %%i in (%CURRENT_DIR%\lib\*.jar) do call cpappend.bat %%i
start Java -Duser.dir=%CURRENT_DIR%  -cp %CLASSPATH% a.b.c.MainApp
3
Terry Ma