2011-04-25 10 views
5

Estoy intentando hacer una pequeña prueba trabajando en Java. Tengo dos directorios root y root/lib. Tengo un archivo root/lib/Test.java y un archivo root/Foo.java. Puedo compilar ambos con javac lib/Test.java y luego javac -classpath lib Foo.java y obtener:Cómo establecer java-classpath para dos directorios?

root/ 
Foo.java 
Foo.class 
lib/ 
    Test.java 
    Test.class 

aquí es cómo se ven como:

class Foo { 
    static public void main(String[] argv) { 
    System.out.println(Test.test()); 
    } 
} 

y

class Test { 
    public static int test() { 
    return 2; 
    } 
} 

¿Cómo ellos se ejecutan por lo que trabajar en conjunto sin agregar un estado de importación? He tratado java -classpath ".;lib" Foo pero acabo de conseguir java.lang.NoClassDefFoundError: Foo

Lala: jeena$ cd root 
Lala:root jeena$ java -classpath ".;lib" Foo 
Exception in thread "main" java.lang.NoClassDefFoundError: Foo 
Caused by: java.lang.ClassNotFoundException: Foo 
    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) 

Respuesta

7

Esto sugiere que usted está en el padre de la raíz:

raíz javac -classpath/lib Foo.java

y esto sugiere que está en la raíz:

java -classpath ";. lib" Foo

Qué dir ¿de qué trabajo estás trabajando? Quizás caminos absolutos serían más fáciles para usted?

Además, ¿con qué sistema operativo? En Linux, por ejemplo, su separador de ruta será : en lugar de ;.

+0

Es Linux y OS X lo estaba probando. De hecho, estaba en la raíz, tal vez debería volver a escribir la pregunta un poco. – Jeena

+0

¡Oh, ah! Ok, ahora lo entiendo, debería usar ":" en lugar de ";" ¡muchas gracias! – Jeena

1

No estoy seguro de cuál es el problema real es - si se encuentra en las ventanas, y ni clase utiliza un nombre de paquete específico (es decir, que están en el paquete sin nombre, que no debería usar), entonces "java-classpath.; lib Foo" debería ser capaz de cargar y ejecutar Foo sin ningún problema.

Si no están en el mismo paquete (que no ha mostrado), siempre que Test sea público, puede acceder al método test() utilizando "packageName.goes.here.Test.test (). "

+0

Son simplemente archivos java sin paquete y he intentado hacer 'java-classpath".; Lib "Foo' en Linux y OS X y en ambos obtengo el NoClassDefFoundError. He cargado los archivos con mi estructura de archivos aquí: http://jeena.net/t/java-test.zip – Jeena

+0

(Cuando lo uso sin las comillas alrededor;; lib entonces el shell se vuelve loco porque piensa que lib es el siguiente comando que sigue, que no es). – Jeena

+0

@Jeena Estás utilizando el separador de ruta incorrecto, como expliqué. –

Cuestiones relacionadas