2011-11-02 16 views
6

Mi pregunta es sobre la inclusión de los archivos jar en la ruta. Tiene 2 partesNo se puede ejecutar el archivo jar a pesar de que PATH y CLASSPATH establecieron

1) Estoy tratando de ejecutar el archivo jar weka.jar situado en /home/andy/software/weka/weka.jar

puntos variable de ruta a este archivo JAR (es decir, a/home/Andy/software /weka/weka.jar) y también lo hace CLASSPATH.

Sin embargo, cuando intento ejecutar el jar usando java -jar weka.jar, aparece el error "No se puede acceder al archivo jar weka.jar".

¿Alguna idea de lo que está pasando? Estoy en Ubuntu Linux. Miré alrededor en SO y parece que no estoy haciendo nada que obviamente esté mal (ya que tanto PATH como CLASSPATH parecen estar configurados correctamente).

2) Me gustaría poder poner todos mis archivos jar en un solo directorio e incluir ese directorio en mi ruta (en lugar de incluir cada contenedor individualmente). ¿Cómo puedo hacer eso?

Gracias de antemano.

EDIT 1 -> Aquí está mi línea de comandos

[email protected]:~$ export CLASSPATH=$CLASSPATH:/home/andy/research/software/weka/weka.jar 
[email protected]:~$ echo $CLASSPATH 
:/home/andy/research/software/weka/weka.jar 
[email protected]:~$ java -jar weka.jar 
Unable to access jarfile weka.jar 
[email protected]:~$ java weka.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: weka/jar 
Caused by: java.lang.ClassNotFoundException: weka.jar 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: weka.jar. Program will exit. 
[email protected]:~$ 

EDIT 2 -> He cambiado variable PATH para que apunte al directorio '/ home/Andy/investigación/software/weka /' y aún así obtener 'incapaz de acceso jarfile error '

+0

Intenta usar '$ HOME' en lugar de' ~'? –

+0

Bueno, en realidad he utilizado la ruta completa: /home/andy/software/weka/weka.jar. Lo siento por eso. – user721975

+1

-jar significa que la classpath se ignorará – micfra

Respuesta

1

Cuando el jar está en el classpath significa que la biblioteca está disponible para el jvm. Cuando desee ejecutar un archivo jar (ejecutar es main), aún necesita proporcionar una ruta válida al archivo.

+1

Lo siento, no entiendo. Entonces, ¿cuál es el sentido de agregarlo a la ruta de clases si cada vez que necesito proporcionar la ruta completa de todos modos? – user721975

9

1) La opción -jar de java inhabilita el uso de CLASSPATH. Por favor, eche un vistazo a Setting the CLASSPATH of Weka

2) entradas de ruta de clase pueden contener el carácter comodín nombre base , que se considera equivalente a especificar una lista de todos los archivos en el directorio con el .jar extensión o .JAR. Por ejemplo, la entrada de la ruta de clase foo/ especifica todos los archivos JAR en el directorio llamado foo. Una entrada classpath que consiste simplemente en * se expande a una lista de todos los archivos jar en el directorio actual. Eche un vistazo a Setting the class path|Understanding class path wildcards

+0

Cuando lo ejecuto sin -jar, me da una excepción "java.lang.NoClassDefFoundError: weka/jar" principal "Excepción en el hilo". – user721975

+0

Por favor edite su pregunta agregando su CLASSPATH y su línea de comando. ¿Lo ha comparado con el enlace a la wiki de Weka publicado anteriormente? – micfra

+0

Sí, lo hice. Pude invocar weka usando 'java -cp $ CP -Xmx500m weka.gui.explorer.Explorer' pero realmente quiero poder ejecutar el archivo jar directamente (java weka.jar) ya que quiero una forma general de ejecución archivos jar incluyéndolos en la ruta. También he actualizado la pregunta como sugirió. Gracias. – user721975

1

No se puede acceder a * .jar significa que java no puede encontrar este archivo jar. Debe ejecutar este comando (java -jar weka.jar) desde la carpeta donde se encuentra su jar, o corregir su variable PATH. Debe señalar a la CARPETA donde se coloca el contenedor, no el archivo jar directamente.

+0

Bueno, esa es la cuestión. No quiero estar en la carpeta todo el tiempo y aún quiero poder ejecutar el archivo jar. La variable PATH apunta, de hecho, al directorio '/ home/andy/research/software/weka /'. – user721975

+0

@ user721975 Entonces, ¿por qué no puedes simplemente ejecutar 'java -jar/my/path/to/jar'? Creo que de todos modos no es la mejor idea: poner la ubicación de tu jar individual en la variable 'path' del sistema – javagirl

3

no ejecuta como

java -jar weka.jar 

En vez darle el nombre de una de las clases DENTRO frasco.

un ejemplo sencillo sin establecer la ruta de clases:

java -jar /home/andy/research/software/weka/weka.jar weka.core.SystemInfo 

un ejemplo sencillo utilizando el conjunto de ruta de clases:

export CLASSPATH=$CLASPATH:/home/andy/research/software/weka/weka.jar 

java weka.core.SystemInfo 

ejemplo más complicado:

export WEKA_HOME=/home/andy/research/software/weka/ 

export CLASSPATH=$CLASPATH:$WEKA_HOME/weka.jar 

export HEAP_OPTION=-Xms4096m -Xmx8192m 
export JAVA_COMMAND=java $HEAP_OPTION 

$JAVA_COMMAND weka.core.SystemInfo 
0

asumiendo que su en la misma carpeta que el weka.jar todo lo que necesita es ./ antes el nombre del jar

java -jar ./weka.jar weka.core.SystemInfo 
Cuestiones relacionadas