2017-03-16 36 views
0

项目结构:不能在同一个包访问类,不会增加类路径

./src/com/example/Test.java 
./src/com/example/Dog.java 

Test.java

package com.example; 

public class Test { 
    public void testing() { 
     Dog d = new Dog("Lab"); 
    } 

} 

Dog.java

package com.example; 

public class Dog { 
    private String breed; 

    Dog(String breed) { 
     this.breed = breed; 
    } 
} 

它编译成功时,我尝试此

.\src > javac com\example\Test.java

但是,当我做到这一点

.\src > javac -cp "C:\Tomcat\lib\servlet-api.jar" com\example\Test.java

有了这个错误

error: cannot find symbol 
       Dog d = new Dog("Lab"); 
       ^
    symbol: class Dog 
    location: class Test 

我猜这是因为现有的类路径被覆盖失败。我如何避免这种情况?

此外,可当它从\ SRC的父目录中运行,这样

javac src\com\example\Test.java

我得到同样的错误作为一个类路径的你解释更详细上为什么会失败。

对不起所有的困惑。

谢谢Jon Skeet帮忙。

+0

我建议你把它改写成只有'Test.java'和'Dog.java'的[mcve] - servlet部分几乎肯定是一个红色的鲱鱼。 –

+0

把'src'目录放在类路径中,我不能重现这个错误。你确定''C:\ Users \ AK051428 \ Desktop \ projects \ listener_test \ src“'和src'一样吗?为什么不把它指定为'src'? –

+0

@JonSkeet我试图做到最小和简洁 – user3600999

回答

0

编译器会将在classpath源根目录目录 - 换句话说,试图找到包com.example类时,它会寻找这两个类和源文件在com/example子目录从每个目录类路径。

当你编译如下:

.\src > javac com\example\Test.java 

... classpath中隐含的 “当前目录”。

当你明确指定的类路径是这样的:

.\src > javac -cp "C:\Tomcat\lib\servlet-api.jar" com\example\Test.java 

...事实并非如此。你需要添加.到classpath中明确:

.\src > javac -cp "C:\Tomcat\lib\servlet-api.jar";. com\example\Test.java 

同样,当你在src不是,你必须指定src作为在classpath:

. > javac -cp src src\com\example\Test.java 

就我个人而言,我尝试确保所有我想要编译的源代码都在javac中明确列出 - 否则很可能会使用过时的类文件而不是重新编译源代码。

+0

谢谢你的解释。只是为了确保我理解最后一部分,当我说'。 > javac src \ com \ example \ Test.java'没有classpath,它会在。\ com \ example中查找Dog.java,而不是在。\ src \ com \ example中,对吗? – user3600999

+0

,非常感谢你的耐心和乐于助人。你是个好人:D – user3600999

-1
.\listener_test > javac -cp .;C:\Tomcat\lib\servlet-api.jar;"C:\Users\AK051428\Desktop\projects\listener_test\src" -d classes src\com\example\TestServlet.java 

添加;

0

还有一个可能的解决方案。 “”:

javac -cp C:\Tomcat\lib\servlet-api.jar -sourcepath C:\Users\AK051428\Desktop\projects\listener_test\src -d classes src\com\example\TestServlet.java

现在这告诉javac的在您的源代码树中的位置。

+0

将src添加到sourcepath或类路径中有没有这个技巧,但我想知道为什么它没有这个功能就无法工作。 – user3600999