2013-04-14 113 views
3

我在Eclipse中創建了一個項目,現在正在嘗試確保從命令行編譯.java文件。我一直在試圖使用我的所有.java文件在文件夾中使用javac *.java進行編譯。但是,這會導致錯誤,因爲引用外部庫Joda-time中的類。我有以下爲項目製作的.classpath文件,但不知道如何處理它。從命令行編譯.java文件 - 外部庫,類路徑

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> 
    <classpathentry kind="lib" path="libs/joda-time-2.2.jar"/> 
    <classpathentry kind="output" path="bin"/> 
</classpath> 

我試着編譯javac -classpath *.java,但這隻會產生更多的錯誤。我的源文件位於'src'文件夾內的包文件夾內。我把我的classpath文件和我的joda-time-2.2.jar文件放在哪裏,以及如何讓所有東西都能編譯?

[編輯]我使用Windows 7

回答

9

.classpath文件來看,這可能工作:

javac -d bin -cp libs/joda-time-2.2.jar src/your/package/*.java 

這裏假設你在你的項目的目錄中運行它。

-d標誌告訴javac將輸出文件放在哪裏。 -cp標誌是-classpath的簡寫。我在你的問題中得到了基於.classpath文件的這些參數。

通常,您可以通過閱讀並理解javac輸出中的錯誤來了解需要什麼。我敢打賭,起初你有很多cannot find symbol錯誤,因爲「符號」不在你的類路徑中,所以javac不可能知道如何找到它們。

瞭解如何構建項目非常重要,它是程序員的基礎知識和核心能力。

一旦你明白瞭如何以這種方式手動構建,我建議查看構建工具,最好是Maven,或者Ant,這樣可以使命令行上的構建變得更容易。大多數Java項目都使用這些工具在命令行和自動構建系統中構建產品,持續集成等等。

+0

謝謝,這工作。我也很欣賞.classpath文件的解釋。 –

+0

我會做類似的事情嗎? java -cp bin packagename.classname運行程序,但是我指定了另一個classpath參數來包含庫嗎? –

+0

忽略以前的評論,我想明白了。只需要用分號分隔路徑。 –

1

基本的Eclipse編譯你的程序,並將它們在bin文件夾中。命令行將其編譯到同一目錄中。如果您正在編譯src文件夾中的文件,您會發現它現在已經散佈了.class文件。 Eclipse中Java編譯器的默認目錄是您的項目。對於命令行,它是源文件所在的文件夾。

所以,如果你有一個叫做Project項目上你Desktop,那麼默認的,因爲Eclipse在Project\src目錄中源文件是C:\Users\UserName\Desktop\Project,但如果你用命令行編譯它,則默認目錄爲C:\Users\UserName\Desktop\Project\src

以編程方式獲取當前的默認目錄,使用:

System.out.println("System.getProperty ("user.dir")");

現在,如果你需要使用命令行編譯,我會建議你把.jar文件在你src文件夾中。

但是,我不認爲你需要.classpath文件。 Here就是這樣。