2011-11-30 72 views
1

我在stackoverflow上看到了幾個非常類似的問題,但沒有遇到任何完全符合我的問題的東西。我有一個包含多個.java文件的文件夾,另一個文件夾包含兩個.jar文件。我需要包括jar文件,同時使用javac從而使整個項目被一氣呵成編譯:classpath中的多個jar不起作用

$: javac -classpath .:~/myjardir/*.jar ~/myprojectdir/*.java 

但如果我這樣做,只有第一個罐子是公認的,並且依賴於第二罐子一切拋出一個錯誤。令人驚訝的是,如果我分別編譯每個程序,

$: javac -classpath .:~/myjardir/oneofthejars.jar ~/myprojectdir/file1.java 

然後一切工作正常。我也在Eclipse中分別編譯了該項目,以測試代碼和jar。只有當我嘗試在命令行中使用-classpath的罐子時,我纔會收到錯誤。通配符條目應該在JDK6中起作用,所以我在這裏處於困境。

+0

我建議你使用像'ant'或'maven'這樣的構建工具來跟蹤你的依賴並執行你的構建。使用通配符的AFAIK適用於JVM的類路徑,但它可能不適用於Windows中的'javac' –

回答

1

看到the SO answer here但這裏是從Java文檔的相關段落:

類路徑條目可包含基名通配符*,這被認爲等同於指定與該目錄中的所有文件的列表擴展名.jar或.JAR。例如,類路徑條目foo/**指定名爲foo的目錄中的所有JAR文件。一個僅包含*的類路徑條目展開爲當前目錄中所有jar文件的列表。

1

類路徑通配符不像Unix shell中那樣工作。 *表示目錄中名爲*.jar的所有內容。所以你不需要做*.jar,而只需要*。以下應該做你想要什麼:

$: javac -classpath .:~/myjardir/* ~/myprojectdir/*.java 

Understanding class path wildcardsJava SE 6 documentation

+0

Esp,您需要添加雙引號:javac -cp「.. \ lib \ *」test \ wc \ MyCode。 java的 –

0

如果你想在一個類路徑中有多個東西,你必須按照我所知的方法通過類路徑分隔符來區分它們。所以./lib:/lib/mylib在unix系統上是一個有效的類路徑,我認爲在Windows系統上等同於\ lib; \ lib \ mylib。您不必指定每個文件,只需指定目錄。

相關問題