2011-08-24 11 views
14

Cuando estoy en mi proyecto Eclipse compila sin errores, sin embargo cuando intento compilar con javac que dice que me falta algunos paquetes ...¿Cómo hacer que javac encuentre archivos JAR? (Eclipse puede verlos)

copié mi mandato de compilación y parte del texto de error a continuación:

javac -classpath lib/ -d bin/ src/*.java 
src/Cleaner.java:5: package net.sourceforge.jgeocoder does not exist 
src/MyUtilities.java:19: package org.apache.commons.codec.binary does not exist 

En Eclipse, que se han añadido todos los archivos JAR a la acumulación de ruta, y el programa compila bien.

¿Por qué no puede encontrar las jarras cuando uso javac en lugar de Eclipse IDE?

+0

Porque a Eclipse * se le dijo * dónde buscar pero javac no estaba :-) No hay magia aquí. –

Respuesta

15

-classpath lib/ hará que javac busque un árbol de archivos de clase en lib. Si tiene archivos JAR allí, usted tiene que utilizar -classpath lib/*.jar - y probablemente utilizar cualquier mecanismo de escape a su CLI tiene en el * para asegurarse de que llega a javac en lugar de ser ampliado por el CLI

Ver el javac command reference (windows).

+0

perfecto, ¡eso fue lo que hizo! ¡gracias! – theangryhornet

8

La respuesta existente, tan informativa como es, todavía me dejó pensando, teniendo que repasar los documentos javac-classpath. Aquí hay una revisión de lo que tal vez quiera saber:

javac -cp "lib/" Example.java cargará todos los archivos .class en lib/.
javac -cp "lib/\*" Example.java cargará todos los archivos .jar en lib/, pero no en los archivos .class.
javac -cp "lib/;lib/\*" Example.java cargará todos los archivos .jar y .class en lib/.

Notas:

  • El (comodín) carácter * tal como se utiliza en los ejemplos anteriores se escapó (nótese el \ antes *). \ es para bash, si estás usando otra cosa, podría ser diferente. Desea escapar porque las utilidades Java SDK, como javac, su propia forma de interpretar el comodín. Por lo que puedo decir (corríjanme si estoy equivocado), la línea de comandos de Windows no expande * por lo que no necesita escaparse: -cp lib\* debería estar bien.
  • ; separa las rutas, como en javac -cp ".;a/;b/;c/" Example.java - esto cargaría los archivos .class en los directorios siguientes: directorio actual, a, by c.
  • Rodee la classpath con comillas (como en los ejemplos) cuando utilice separadores (;).
Cuestiones relacionadas