Как установить java -classpath для двух каталогов? - PullRequest
5 голосов
/ 25 апреля 2011

Я пытаюсь получить небольшой тест, работающий на Java.У меня есть две директории root и root/lib.У меня есть файл root/lib/Test.java и файл root/Foo.java.Я могу скомпилировать как с javac lib/Test.java, так и с javac -classpath lib Foo.java и получить:

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

вот как они выглядят:

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

и

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

Как мне их запустить, чтобы они работали вместе без добавления оператора импорта?Я пытался java -classpath ".;lib" Foo, но я просто получаю 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)

Ответы [ 2 ]

7 голосов
/ 25 апреля 2011

Это говорит о том, что вы являетесь родителем root:

javac -classpath root / lib Foo.java

И это говорит о том, что вы в корне:

java -classpath ".; Lib" Foo

Из какого каталога вы на самом деле работаете? Может быть, абсолютные пути будут проще для вас?

Кроме того, какая операционная система? Например, в Linux ваш разделитель пути будет : вместо ;.

1 голос
/ 25 апреля 2011

Я не уверен, в чем именно заключается проблема - если вы находитесь в Windows, и ни один из классов не использует конкретное имя пакета (то есть, они находятся в безымянном пакете, который вы не должны использовать), тогда " java -classpath.; lib Foo "должна иметь возможность загружать и запускать Foo без проблем.

Если они не находятся в одном пакете (который вы не показали), то, пока Test общедоступен, вы можете получить доступ к методу test () с помощью "packageName.goes.here.Test.test () . "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...