2013-02-08 112 views
0

我正在遵循一个Java教程(留给自己的设备来编写测试代码),但是当试图编译时,我得到了一个找不到符号的错误。我看了看,但看不出为什么我写的代码产生了这个错误。这可能很简单,但我会很感激有人指出原因,因为我正在拉我的头发,试图理解我做错了什么!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 

对我的生活中,我能不知道是什么,我做错了。这些文件位于相同的目录和包中,所以据我所知这应该是编译。我很感激现在只能修改代码,并解释我做错了什么,这样我才能记住它的未来。提前致谢。

+3

您是否先编译过BeerExpert? – 2013-02-08 19:55:54

回答

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

为什么要在classpath中包含'.java'文件的目录? – 2013-02-08 20:03:55

+0

谢谢,这是一种享受。我不会想到我自己。它也证明,我还需要在运行测试时指定类路径(这是另一个令人痛苦的互联网搜索,你可能认为在编译问题之后我已经完成了)!非常感激。 – 2013-02-08 20:29:41

+0

@RohitJain你说得对。正确的做法是将_src_添加到_sourcepath_。类路径也行得通,但在概念上似乎是错误的。更新了答案。 – user000001 2013-02-09 09:40:54

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