2013-04-24 110 views
3

javac -sourcepath選項的要點是什麼?sourcepath和只指定源文件之間的區別?

假設你有一個文件Ball.java和文件Eight.java,似乎運行沒有什麼區別:

javac Eight.java lib/pool/Ball.java 

javac Eight.java -sourcepath lib 

類路徑對我來說很有意義的這意味着你只需要將類文件分發給不需要混淆源代碼的開發者,但是如果它是你自己的/內部項目,所以我不認爲你可能需要/不需要源代碼爲什麼需要它。

人們是否有大量的源代碼庫而不是類?

從進一步的測試我已經證實,-sourcepath甚至沒有考慮源代碼的最後修改日期,就像classpath一樣,所以甚至不可能在構建過程中節省時間。當使用-classpath時,如果.class文件不存在並且源文件存在,或者.java文件比.class文件更新,則它將生成.class文件,而源路徑上的任何源文件將被無限制地重新構建他們是多麼新。並且,當指定-sourcepath和-classpath時,如果源文件較新,則只需重建類路徑的操作即可,因此指定源路徑和類路徑似乎完全沒有意義。 我也測試過,以確保-sourcepath和-classpath都只構建解析所需的必要源文件。 -sourcepath指定特定.java文件的唯一好處是,sourcepath只需要指定一個目錄,並且會自動提取任何jar或zip文件。

所以是懶惰的源路徑點(不想提取&指定所有的源文件)? 是否有使用-sourcepath over -classpath的好處?由於他們似乎做同樣的事情,但類路徑通過節省時間,當源不需要重建時更好地執行它。

回答

0

我從開發的其他同事發現,如果他們想要構建項目或子項目的一部分,他們通常會在開發過程中使用它。而不是從頭開始構建所有的東西(可能需要幾個小時),他們只想構建一些項目,然後他們可以在-sourcepath中指定整個項目的其他目錄,以便這可以解決類。這意味着它可以自動查找所需的依賴關係,並在需要時構建它們。

我也被告知,這可以在maven構建期間有所幫助,因爲依賴收集的順序可能非常無組織。由於在構建時不存在依存關係,因此可以將整個代碼樹指定爲源路徑,而不是缺少依賴關係。雖然我認爲這不是最好的建議,但當有人遇到問題時,這很有幫助。

1

sourcepath用於查找您要求編譯的文件(您的示例中爲Eight.java)中沒有.class文件的文件中引用的.java文件。編譯器也會自動編譯這些。我不確定它是否比較了.java和相應的.class文件的修改時間,並且如果更新,則重新編譯.java,但我認爲它確實如此。

+0

是的,我從測試中發現的另一個區別是類路徑將查找.class和.java文件以解析,並且如果.class文件不存在或者.java文件的修改時間將生成源代碼大於.class文件。儘管源路徑每次都會重新編譯源,而不管最後一次修改日期。我純粹試圖找出這個原因,指定sourcepath的目錄和顯式指定你想要的是由javac構建的確切文件 – lavamunky 2013-04-25 10:47:44