2012-04-30 8 views
11

Ok, sé que esta pregunta se ha hecho muchas veces muchas veces, pero la he buscado en Google y he visto ejemplos y he consultado SO durante el último mes, y me tomo en serio no puedo hacer que esto funcione Creo que el problema es que quiero poder ejecutar el programa desde Eclipse y la línea de comandos. También estoy usando OSX y creo que muchos de los ejemplos que estoy leyendo son para Windows/Linux.Añadiendo jar a classpath al ejecutar desde la línea de comando

Si tengo un sencillo programa compilado en Eclipse que quiero ejecutar desde la línea de comandos que hacer esto:

java -cp bin MyProgram 

tengo otro programa que compilar y ejecutar en Eclipse, y esto hace referencia al JDBC de MySQL conector (mysql-connector-java-5.1.19-bin.jar) que se almacena en el mismo directorio. Esto funciona bien desde Eclipse, pero no puedo ejecutarlo desde la línea de comandos.

He intentado todas las combinaciones de cosas ...

java -classpath "bin;mysql-connector-java-5.1.19-bin.jar" MyProgram 
java -cp bin\;mysql-connector-java-5.1.19-bin.jar MyProgram 

y obtener todo tipo de errores de clase no encontrado ...

Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram 
Caused by: java.lang.ClassNotFoundException: MyProgram 
    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:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
+0

Hola Matt, si no me equivoco creo que la ruta de clases es declarar la ruta de la clase principal que desea ejecutar. Entonces, en este caso, si su clase está en la carpeta bin, simplemente probaría: java MyProgram o java -cp myprogrampath MyProgram –

+1

@FedericoGiust No específicamente; classpath solo define un archivo o una ruta a un conjunto de clases. El classpath puede o no incluir la clase ejecutable (que generalmente da como resultado una excepción o un error directo de java.exe). Classpath puede incluir directorios y archivos que no tienen clases ejecutables. – Qix

+0

posible duplicado de [línea de comandos de Java con .jar externo] (http://stackoverflow.com/questions/6069702/java-command-line-with-external-jar) –

Respuesta

13

Su problema es el separador min que está utilizando. El separador ; es para ventanas. En los sistemas Unix se debe utilizar en lugar ::

java -classpath "bin: mysql-connector-java-5.1.19-bin.jar" MiPrograma

0

no ha definido su clase principal en classpaht , trate de añadir ./ en -cp

+0

Dudo que el directorio actual contenga su clase principal, Yo creo que 'bin' contiene esos. –

+0

el 'MyProgram' debe establecerse en classpath, también debe agregar el nombre de pachage si coloca' MyProgram' en el paquete. – user1335794

+0

No se preocupe, sé todo sobre classpath y nombre completamente calificado. Solo digo que agregar el directorio actual al classpath es inútil si sus clases están ubicadas en el directorio bin. –

5

Use un ':' para separar las entradas en los sistemas Unix:

java -classpath "bin:mysql-connector-java-5.1.19-bin.jar" MyProgram 
java -cp bin:mysql-connector-java-5.1.19-bin.jar MyProgram 

Eclipse lo convierte automáticamente.

+0

Cualquier razón para escapar del ¿colon? –

+0

no, solo está mal cortar/pegar ... Lo he arreglado – mprivat

-2

te sugeriría altamente intenta --jar o jar . No puedo recordar cuál es, pero esos deberían resolverlo. Además, si tiene las herramientas de desarrollo de apple, tienen un empaquetador de jar.

+1

Es -jar, pero obviamente sus clases no son jared up. Olvídese de las herramientas de desarrollo de Apple que son del siglo pasado. Eclipse, NetBEans e IntelliJ están a años luz de eso. –

+0

@GuillamePolet Agrred, pero solo les mencioné hacerles venir con una utilidad para producir aplicaciones de tarros –

1

Ver:

String pathSeparator = System.getProperty("path.separator"); 
Cuestiones relacionadas