2012-02-08 33 views
5

Tengo un proyecto que incluye un archivo jar externo en él, seguí este enlace http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29 para agregar una ruta externa de Java. Luego traté de compilar mi código en la terminal, sin embargo, todavía estoy recibiendo un error sobre el archivo jar no existe.Cómo compilar el proyecto de Java con el archivo jar externo en el terminal de Linux

escribí los siguientes comandos: (Actualmente estoy en el directorio del proyecto y hay tres carpetas llamadas src bin y lib allí)

bash-3.2$ ls 
bin lib README.txt src 
bash-3.2$ javac -cp lib/jsoup-1.6.1.jar src/DayTradingStockBlog.java 
bash-3.2$ java -cp .:lib/jsoup-1.6.1.jar src/DayTradingStockBlog 
Exception in thread "main" java.lang.NoClassDefFoundError: src/DayTradingStockBlog (wrong name: DayTradingStockBlog) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
     at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
     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: src/DayTradingStockBlog. Program will exit. 

¿Cómo debería resolver este problema?

+0

Lo * * exactamente qué dice el error? –

+0

¿Y cómo estás compilando? –

+0

package org.jsoup no existe import org.jsoup.Jsoup; – CanCeylan

Respuesta

9

Nunca usa barras, que son delimitadores de ruta, en una llamada a java (pero a javac). Si src es parte de su declaración del paquete - en este caso, toda la declaración del paquete, que apuesto a que no lo es, lo haría, en lugar de:

java -cp .:lib/jsoup-1.6.1.jar src/DayTradingStockBlog 

utilice un punto:

java -cp .:lib/jsoup-1.6.1.jar src.DayTradingStockBlog 

Pero supongo que es el lugar donde ha creado la clase, por lo que la ruta pertenece a la ruta de clase:

java -cp .:lib/jsoup-1.6.1.jar:./src DayTradingStockBlog 

no son libres de omitir la ruta del nombre de clase, y añadirlo a la ruta de clases, o vice versa - tiene que fi t a su declaración de paquete.

Si se declara un paquete foo, (que tiene mucho más sentido que src), el nombre de la clase ya no es DayTradingStockBlog pero foo.DayTradingStockBlog.

+0

+1 para el uso correcto de invocar una 'clase empaquetada' (usando un punto). – asgs

1

utilización ruta de clase (cp)

javac -cp %YOUR_JAR_LOCATION% myClass.java 
+0

puede ver la edición – CanCeylan

+0

@CanCeylan vaya al DIRECTORIO del jarrón (no hay carpetas en Linux) y proporcione los permisos de acceso: chmod 777 ./jsoup-1.6.1.jar luego ejecute el javac de nuevo – aviad

+0

@aviad Eso es no el problema No desea hacer que su permiso vaya al 777, solo para tener la biblioteca en el classpath. – asgs

2

Basado en su edición, me gustaría sugerir que se encierren todas las ubicaciones de ruta de clases dentro de las comillas simples/dobles. Es decir, hazlo como

java -cp '.:lib/jsoup-1.6.1.jar' src/myClass.

En Linux, los elementos en el classpath están separados por dos puntos (:) y en Windows, es un punto y coma (;).

+0

bash-3.2 $ javac -cp lib/jsoup-1.6.1.jar src/myClass.java bash-3.2 $ java -cp.: lib/jsoup-1.6.1.jar src/myClass – CanCeylan

+0

Probé estos comandos ahora, primero funciona, pero para el segundo da Excepción en el hilo "principal" java.lang.NoClassDefFoundError: src/myClass (nombre incorrecto: myClass) – CanCeylan

+0

@CanCeylan Eso es porque myClass no está bajo el paquete src. Lo inventaste, supongo. Solo hazlo miClase. – asgs

-2

usted debe colocar el archivo Java y archivo jar en el mismo directorio ejemplo: javac -cp jdbc.jar myClass.java funciona para mí

+1

esto no es útil, supongamos que si tiene múltiples programas que usan el mismo JAR externo, ¿realiza copias de JAR cada vez? – CyprUS

Cuestiones relacionadas