2013-02-08 109 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