2012-11-15 52 views
12

我有兩個類擁有和OwningAccessor。這些文件位於相同的目錄中。javac「無法找到符號」錯誤與命令行

public class Owning { 
    String _name = ""; 
    public void printBanner() 
    { 
    } 
    public void printOwning(double amount) 
    { 
     printBanner(); 

     //print details 
     System.out.println("name:" + _name); 
     System.out.println("amount:" + amount); 
    } 
} 


public class OwningAccessor { 
    public void access() 
    { 
     Owning o = new Owning(); 
     o.printOwning(500); 
    } 
} 

當我試圖編譯OwningAccessorjavac -cp . OwningAccessor.java,我得到了編譯錯誤。

symbol : class Owning 
location: class smcho.OwningAccessor 
     Owning o = new Owning(); 
     ^
OwningAccessor.java:6: cannot find symbol 
symbol : class Owning 
location: class smcho.OwningAccessor 
     Owning o = new Owning(); 
       ^

這是怎麼回事?代碼在eclipse IDE下編譯得很好。

+4

他們在同一個目錄嗎?顯示源路徑目錄結構 –

+0

它們位於相同的目錄中。 – prosseek

+0

沒有repro,在這裏工作。如果你第一次編譯'Owning.java',它會起作用嗎? –

回答

15

好吧,讓我們假設你有分佈在文件中的代碼如下

myproject 
├── out 
└── src 
    ├── OwningAccessor.java 
    └── Owning.java 

轉到命令提示符,並將目錄更改爲myproject。一旦出現下面的命令:

javac -d out -sourcepath src src/OwningAccessor.java 

我剛測試它,它工作得很好。編譯後的類將設在out文件夾:

. 
├── out 
│   ├── OwningAccessor.class 
│   └── Owning.class 
└── src 
    ├── OwningAccessor.java 
    └── Owning.java 

編譯一個類將觸發所有其他相關類的編譯。編譯器會自動在src文件夾中查找它們。

+0

這只是符合程序,我想知道爲什麼我沒有獲得CMD systme.out.print輸出? – Faizan

+0

最好的方法是創建一個jar來處理所有這些,並且相當簡單。 – ramu

12

確保您編譯雙方Owning.java和OwningAccessor.java,像這樣:

javac -cp . Owning.java OwningAccessor.java

的Eclipse編譯所有必要的文件給你,這就是爲什麼在那裏工作。

+0

不是java找出它自己的依賴關係嗎? –

+2

它確實如果你在你的編譯器中使用'-sourcepath'標誌 –

+0

Sourcepath應該這樣做,不幸的是我不能測試它作爲我的機器上的javac在任何我嘗試編譯的任何東西上崩潰ACCESS_VIOLATION ... – Kninnug

1

嘗試做出正確的源路徑例如:

 
javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\MySingleton.java 

javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\Main.java 

在「臨時」我們alocate資源和-sourcepath指明是.java文件。