2011-05-20 36 views
22
externo

Desarrollo un proyecto utilizando .jar para volver a utilizar el código.Línea de comandos de Java con .jar

por lo que tengo en .jar llamado tools.jar, y desarrollar una sencilla aplicación en el archivo HelloWorld.java wich se refieren mis herramientas de paquetes de tools.jar

compilo con esta línea de comandos:

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

es exitoso, y cuando quiero ejecutar mi aplicación que utilizo este comando (estoy en la carpeta C: \ MyApp):

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

es un éxito, pero mi pregunta es:

¿Cómo ejecuto mi aplicación cuando tengo múltiples archivos externos .jar?

¿Tengo que agregar cada comando con la opción -cp?

¿Hay alguna forma de generar solo un archivo binario y ejecutarlo (como .exe con programas C)?

Respuesta

36

Concatenate cada argumento archivo jar a Cp con:

; on Windows 
: on Linux or Mac 

por ejemplo,

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

en las JVM más nuevos (6 +, creo) también se puede utilizar el * para añadir todos los archivos JAR en un directorio, por ejemplo,

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

Para ir un paso más allá y crear un único ejecutable empaquetado ver this question.

+1

para mí al menos, su uso de "." aquí fue un poco confuso al principio. los usa en diferentes lugares en los argumentos concatenados, y sin una explicación puede ser confuso para un lector. Los "." es necesario porque por defecto el directorio actual está en la ruta de clase; pero si especificamos el classpath explícitamente, debemos asegurarnos de incluir explícitamente el directorio actual. – Paul

2

Si tiene muchos archivos jar en una carpeta y no desea agregarlos a classpath manualmente. Puedes un .bat en windows o shell en 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 

Y otro archivo del palo que utilizan "para" comunicado a anexar todos los archivos jar a 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

U Si tiene múltiples frascos externos, copiar todos los frascos necesarios para C:\Program Files\Java\jdk1.7.0_17\jre\lib\ext y ejecute el comando javac "yourfilename.java". Se compilará sin ningún error

Cuestiones relacionadas