Comment mettre en java -classpath pour deux répertoires?
J'essaye de faire un petit test de travail en Java. J'ai deux répertoires root
et root/lib
. J'ai un root/lib/Test.java
fichier et un root/Foo.java
fichier. Je peux compiler avec javac lib/Test.java
et puis javac -classpath lib Foo.java
et obtenez:
root/
Foo.java
Foo.class
lib/
Test.java
Test.class
ici est de savoir comment ils ressemblent:
class Foo {
static public void main(String[] argv) {
System.out.println(Test.test());
}
}
et
class Test {
public static int test() {
return 2;
}
}
Comment puis-je exécuter de sorte qu'ils fonctionnent ensemble sans l'ajout d'une instruction d'importation? J'ai essayé java -classpath ".;lib" Foo
mais je viens d'obtenir 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)
OriginalL'auteur Jeena | 2011-04-25
Vous devez vous connecter pour publier un commentaire.
Cela donne à penser que vous êtes le parent de la racine:
Et cela suggère que vous êtes en root:
Annuaire qui êtes-vous vraiment en train de travailler? Peut-être des chemins absolus serait plus facile pour vous?
Aussi, ce système d'exploitation? Sur Linux, par exemple, votre séparateur de chemin d'accès sera
:
au lieu de;
.Ah ah! Ok je comprends maintenant, je dois utiliser ":" au lieu de ";" je vous remercie beaucoup!
OriginalL'auteur Isaac Truett
Je ne suis pas sûr de ce que le réel problème est que si vous êtes sur windows, et ni la classe utilise un package spécifique de nom (c'est à dire, ils sont dans le sans nom de package, vous ne devriez pas utiliser), puis "java -classpath .;lib Foo" devrait être en mesure de charger et d'exécuter des Foo sans problème.
Si ils ne sont pas dans le même package (que vous n'avez pas indiqué), puis aussi longtemps que le Test est public, vous pouvez accéder à la méthode test() à l'aide de "packageName.va.ici.Test.test()."
java -classpath ".;lib" Foo
sur Linux et OS X et sur les deux j'obtiens le NoClassDefFoundError. J'ai téléchargé les fichiers avec mon filestructure ici: jeena.net/t/java-test.zip(Quand je l'utilise sans les guillemets autour de .;lib puis la coquille devient tout fou parce qu'il pense lib est la prochaine commande qui suit, il ne l'est pas.)
Vous utilisez la mauvaise séparateur de chemin, comme je l'ai expliqué.
Ah, vous n'avez jamais spécifié Linux ou OSX, c'est pourquoi I Windows - le ; est le séparateur de chemin pour Windows et pas de type UNIX Systèmes d'exploitation.
Ah ouais vous avez raison, tous les exemples que j'ai vu utilisé ; au lieu de : donc, je suppose que c'est la façon dont java est-il, merci!
OriginalL'auteur Joseph Ottinger