我正在关注Java教程(留给我自己的设备编写测试代码),但在尝试编译时,我得到一个符号未找到错误。我看了看,但看不出为什么我写的代码会产生这个错误。这可能很简单,但我很感激有人指出原因,因为我正在试着理解我做错了什么!
TestBeerExpert.java:
package com.example.model;
import com.example.model.*;
import java.util.*;
public class TestBeerExpert {
public static void main(String[] args) {
TestBeerExpert test = new TestBeerExpert();
test.go();
}
private void go() {
BeerExpert expert = new BeerExpert();
List<String> brands = expert.getBrands("amber");
...
}
}
BeerExpert.java:
package com.example.model;
import java.util.*;
public class BeerExpert {
public List<String> getBrands(String color) {
List<String> brands = new ArrayList<String>();
...
return(brands);
}
}
目录结构:
beerV1 -> src -> com -> example -> model -> TestBeerExpert.java & BeerExpert.java
从beerV1
与javac -d classes src/com/example/model/TestBeerExpert.java
实际错误:
src/com/example/model/TestBeerExpert.java:14: error: cannot find symbol
BeerExpert expert = new BeerExpert();
^
symbol: class BeerExpert
location: class TestBeerExpert
src/com/example/model/TestBeerExpert.java:14: error: cannot find symbol
BeerExpert expert = new BeerExpert();
^
symbol: class BeerExpert
location: class TestBeerExpert
2 errors
对于我的生活,我无法弄清楚我做错了什么。这些文件位于同一目录和包中,据我所知,这应该是编译。我很感激现在只修改了代码但是解释了我做错了所以我能记住它的未来。提前谢谢。
答案 0 :(得分:4)
将src
添加到源路径
javac -sourcepath src -d classes src/com/example/model/TestBeerExpert.java
您需要执行此操作,因为您从源所在的其他目录执行javac
。
不需要先编译BeerExpert
(javac将使用上述命令为您完成)。
Validatation:
~/beerV1$ ls src/com/example/model/
BeerExpert.java TestBeerExpert.java
~/beerV1$ ls classes
~/beerV1$ javac -sourcepath src -d classes src/com/example/model/TestBeerExpert.java
~/beerV1$ ls classes/com/example/model/
BeerExpert.class TestBeerExpert.class
答案 1 :(得分:0)
您收到编译错误,因为编译器无法找到BeerExpert类。试试以下 1.首先使用以下方法编译BeerExpert.java: javac -d classes src \ com \ example \ model \ BeerExpert.java 2.然后编译TestBeerExpert.java javac -cp classes -d classes src \ com \ example \ model \ TestBeerExpert.java