2012-06-21 10 views
5

He creado un archivo por lotes "run.bat":cómo hacer referencia a todos los archivos jar en un directorio en mi archivo por lotes

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

he guardado todos los archivos de clases relacionadas con la solicitud en "aplicación .jar "y Start es la clase desde donde comienza la ejecución de la aplicación. Tengo este archivo "run.bat" y todos los archivos jar que mi "app.jar" quiere consultar en el mismo directorio.
Mantuve todos estos frascos en la carpeta "Jars" y me refería a él en mi archivo "run.bat" como se muestra arriba. Sin embargo, para referirme a todos y cada archivo jar por mi "run.bat", necesito especificar la ruta como ". \ Jars \ jarname.jar". Cuando estoy usando ". \ Jars \ *. Jar", los frascos no son referidos por "run.bat". ¿Alguien puede proporcionarle una alternativa?

+1

Creo que aquí se Encontrará algunos consejos más http://stackoverflow.com/questions/1914493/add-jar-file-to-buildpath-in-windows-command-line – BigMike

+0

y, por cierto, un buen comando de lote de windows para FOR también puede ser útil (ver http://stackoverflow.com/questions/180741/how-to-do-something-to-each-file-in-a-directory-with-a-batch-script) – BigMike

+0

@BigMike buen punto acerca de la versión java . En los sistemas Linux, no es un problema debido a la expansión del nombre de archivo. No estoy seguro de que Windows también tenga alguna expansión +1 – Morfic

Respuesta

2

Actualmente solo has hecho la mitad del trabajo con * .jar. También debe pasarlos a Java como classpath: java -cp $CLASSPATH mypackage.mysubpackage.Start. (en Windows, creo que el uso de una variable en un script es% CLASSPATH%)

Edición posterior: eche un vistazo a los comentarios de BigMike sobre su pregunta. Si está utilizando una versión java < 1.6, puede necesitar usar un bucle para construir un% CLASSPATH% completo que incluya el nombre completo de cada jar individualmente, porque supongo que el shell de Windows no incluye expansions como * nix sistemas.

+0

Java leerá la variable de entorno% CLASSPATH% de todos modos, ¿no? – trojanfoe

+1

Está en lo correcto, debería leerlo automáticamente.Pero debido a que establecer el classpath puede ser complicado, se sugiere como una mejor práctica usar la opción 'java -cp'. Esto también le permite especificar el classpath individualmente para cada una de sus aplicaciones sin afectar el resto de las aplicaciones existentes, mientras que la modificación de la variable de entorno tendrá un impacto global. – Morfic

+0

de acuerdo con Grove, jugando con variables de env en Windows puede ser un gran dolor (aaah echo de menos el viejo autoexec.bat) – BigMike

2

Puede intentar utilizar for loop para crear una ruta de clase en lote, como la siguiente.

@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 por el bien del comando FOR;) – BigMike

+0

+1: @ guanxiaohua2k6, debe agregar un ' exit/b' después de la pausa para evitar ingresar la subrutina 'add_jar' después de que termine el ciclo' for'. –

+0

OK, gracias. Lo agregué – guanxiaohua2k6

1

Usted podría intentar algo que se da en el siguiente enlace http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

ruta de clase entendimiento comodines sección:.

"Una entrada de ruta de clase que contiene * no coincidirá con los archivos de clase A emparejar ambas clases y archivos JAR en un solo directorio foo, use foo; foo/* o foo/; foo. El orden elegido determina si las clases y recursos en foo se cargan antes de los archivos JAR en foo, o viceversa. Subdirectorios a no se buscó recursivamente Por ejemplo, foo/ busca los archivos JAR solamente en foo, no en foo/bar, foo/Baz, etc."

Así que en su caso se debe hacer:

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

y no

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

proporcionados todos los frascos que se requieren están presentes en. \ carpeta tarros

Cuestiones relacionadas