Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为两个目录设置java类路径?_Java_Jvm - Fatal编程技术网

如何为两个目录设置java类路径?

如何为两个目录设置java类路径?,java,jvm,Java,Jvm,我正在尝试用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

我正在尝试用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());
  }
}

如何运行它们,使它们在不添加导入语句的情况下协同工作?我已经尝试了
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)

我不确定实际的问题是什么——如果您在windows上,并且两个类都没有使用特定的包名(即,它们位于不应该使用的未命名包中),那么“java-classpath.;lib-Foo”应该能够毫无问题地加载和运行Foo


如果它们不在同一个包中(您没有显示),那么只要Test是公共的,您就可以使用“packageName.goes.here.Test.Test()”访问Test()方法。

这表明您是root的父级:

javac-classpath root/lib Foo.java

这表明你是根:

java-类路径“;lib”Foo

你实际上是从哪个目录工作的?也许绝对路径对你来说更容易


还有,什么操作系统?例如,在Linux上,路径分隔符将是
,而不是

它们只是没有软件包的普通java文件,我尝试在Linux和OS X上执行
java-classpath“;lib”Foo
,在这两种系统上我都得到了NoClassDefFoundError。我在这里用我的文件结构上传了这些文件:(当我使用它时,周围没有引号。;lib然后shell变得非常疯狂,因为它认为lib是接下来的下一个命令,事实并非如此。)@Jeena正如我所解释的,你使用了错误的路径分隔符;是Windows的路径分隔符,而不是像操作系统那样的UNIX;instad of:所以我假设java就是这样做的,谢谢!我试过的是Linux和OSX。我其实是在根里面,也许我应该把这个问题重写一点。哦,啊!好的,现在我明白了,我应该用“:”代替“;”非常感谢!
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)