如果不添加到classpath

时间:2017-03-16 09:02:14

标签: java tomcat

项目结构:

./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

我得到与classpath相同的错误。

抱歉所有的困惑。

感谢Jon Skeet提供帮助。

3 个答案:

答案 0 :(得分: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你的源树所在的位置。

答案 1 :(得分:0)

编译器会将类路径上的目录视为源根目录 - 换句话说,在尝试查找包com.example的类时,它将查找类和源文件类路径上每个目录的com/example子目录。

当你这样编译时:

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

...类路径隐含地"当前目录"。

当您明确指定类路径时:

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

......它不是。您需要明确地将.添加到类路径中:

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

同样,当您 src中没有时,您必须将src指定为类路径:

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

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

答案 2 :(得分:-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

添加“。;”