2011-05-20 4 views
22

Je développe un projet en utilisant .jar pour réutiliser le code.Ligne de commande Java avec .jar externe

J'ai donc sur .jar du nom tools.jar, et je développe une application simple dans le fichier HelloWorld.java Wich mes OUTILS paquet de tools.jar

Je me réfère compilez avec cette ligne de commande:

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

Il est un succès, et quand je veux exécuter ma demande que j'utilise cette commande (je suis dans C: \ MyApp):

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

Il est réussi, mais ma question est:

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

Dois-je ajouter chaque 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 des programmes C)?

Répondre

36

Concatenate chaque argument de 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 nouveaux JVMs (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 emballé voir this question.

+1

à moi au saut, votre utilisation de "." C'était un peu déroutant au début. vous les utilisez à différents endroits dans les arguments concaténés, et sans une explication, cela peut être source de confusion pour un lecteur. Le "." est nécessaire car, par défaut, le répertoire courant est dans le classpath; mais si nous spécifions explicitement le classpath, nous devons nous assurer d'inclure explicitement le répertoire courant. – Paul

2

Si vous avez plusieurs fichiers jar dans un dossier et que vous ne souhaitez pas les ajouter manuellement au classpath. Vous pouvez vous .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 de chauve-souris qui utilisent "pour" déclaration à annexer 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 
-4

Si u ont plusieurs pots externes, copier tous les bocaux requis pour C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext et exécutez la commande javac "yourfilename.java". Il sera compilé sans erreur

Questions connexes