web-dev-qa-db-fra.com

Java ligne de commande avec .jar externe

Je développe un projet en utilisant .jar pour réutiliser du code.

J'ai donc sur .jar nommé TOOLS.jar, et je développe une application simple dans le fichier HelloWorld.Java qui fait référence à mon package TOOLS de TOOLS.jar

Je compile avec cette ligne de commande:

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

C'est réussi, et quand je veux exécuter mon application j'utilise cette commande (je suis dans le dossier C:\MyApp):

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

C'est réussi, mais ma question est:

Comment exécuter mon application lorsque j'ai plusieurs .jar externes?

Dois-je ajouter chacun dans la commande avec l'option -cp?

Existe-t-il un moyen de générer un seul fichier binaire et de l'exécuter (comme .exe avec les programmes C)?

25
TheFrancisOne

Concatène chaque argument du fichier jar à cp avec:

; on Windows
: on Linux or Mac

par exemple.

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

sur les nouvelles machines virtuelles Java (6+, je pense), vous pouvez également utiliser le * pour ajouter tous les fichiers JAR dans un répertoire, par exemple.

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

Pour aller plus loin et créer un seul exécutable packagé, voir cette question .

40
Joel

Si vous avez plusieurs fichiers jar dans un dossier et que vous ne voulez pas les ajouter manuellement au chemin de classe. Vous pouvez vous un .bat sur Windows ou Shell sur Linux.

cpappend.bat de 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

Et un autre fichier bat qui utilise l'instruction "for" pour ajouter tout le fichier jar à classpath

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