2014-02-11 60 views
-1

我在我的項目文件夾2 packages如何在Java中編譯相互依賴的包?

src/main/java/com/scg/domain/*src/main/java/com/scg/util/*。他們兩個都有classesimport其他人。 例如: import com.scg.util.AddressClass之一src/main/java/com/scg/domain/import com.scg.domain.TimeCardsrc/main/java/com/scg/util/Class之一。 現在我想編譯both packages中的所有Java files

編譯所有的Java filessrc/main/java/com/scg/util/

我嘗試這樣做:

javac -cp src/main/java/com/scg/domain/*:src/main/java/com/scg/util/* src/main/java/com/scg/util/* 

,但它給了我72個錯誤。我粘貼它的一個樣本:兩個packages

src/main/java/com/scg/domain/ClientAccount.java:11: error: cannot find symbol 
public final class ClientAccount implements Account { 
              ^
    symbol: class Account 
src/main/java/com/scg/domain/ConsultantTime.java:16: error: cannot find symbol 
    private Account account; 
      ^
    symbol: class Account 
    location: class ConsultantTime 
src/main/java/com/scg/domain/ConsultantTime.java:35: error: cannot find symbol 
    public ConsultantTime(final Date date, final Account account, 
               ^
    symbol: class Account 
    location: class ConsultantTime 
src/main/java/com/scg/domain/ConsultantTime.java:66: error: cannot find symbol 
    public Account getAccount() { 

什麼是最簡單的方法compile所有java files那裏是依賴(我的意思是import這裏)。

+1

你是怎麼忘記的? http://stackoverflow.com/a/19776757/2970947 –

+0

@ElliottFrisch:那是一個單一的java文件。我想編譯所有的類文件。通配符「*」不起作用。 – eagertoLearn

+0

@eagerToLearn在您原來的問題中查看我的回答,或者確實是您在11月份詢問的問題,然後將文件名更改爲'* .java'。這個問題非常相似,它應該已經與您的原始問題一起發佈。同樣的答案。請不要混淆與重複和三重複這個網站。 – EJP

回答

1

你應該編譯所有的Java源文件一次:

javac src/main/java/com/scg/domain/*.java src/main/java/com/scg/util/*.java 

你的類路徑的選擇是沒有用的,而不是有效的。類路徑應該包含包含包樹根的目錄或jar文件,其中包含您要編譯的源文件使用的已編譯類。

從命令行編譯許多文件對理解編譯機制非常有用。但你應該真正學會使用像Gradle或Ant這樣的構建工具來構建你的項目,並且在開發過程中使用IDE來編譯和測試你的類。

編輯:

重讀the documentation,您可以使用-cp指定路徑,其中源必須被發現。但是必須指定包樹的根:

-cp src/main/java 
+0

我正在使用maven。但是你在命令行中的做法與使用mvn命令不同 –

+0

此答案不正確。他不必一次編譯所有的Java源代碼。如果他在正確的目錄中,例如'src/main/java',他可以發出'javac com/scg/domain/*。java'或'javac com/scg/util/*。java'和所有需要的依賴項會被編譯。 – EJP

+0

那麼,他不在這個目錄中。 –