2011-09-01 48 views
0

我正在研究一個構建系統,這個系統在很長一段時間內堆積在其他不好的實踐上,並且正在重寫構建過程。涉及的語言是C/C++,Fortran,Ada和Java,並且暫時我堅持使用GNU風格的makefile - 雖然我們正在考慮其他替代方案,如SCons。構建Java代碼的快速,易維護和可並行化的方式?

雖這麼說,我正在尋找一些具體建議 - 而不是形式的建議「使用不同的構建系統」等

誰寫的特定的makefile我看現在有計劃在Java代碼順序構造,看起來是這樣的:

LIST_OF_JAVA_FILES = file1.java 
LIST_OF_JAVA_FILES += file2.java 
LIST_OF_JAVA_FILES += file3.java 
... 
LIST_OF_JAVA_FILES += fileN.java 

all: ${LIST_OF_JAVA_FILES} 

${LIST_OF_JAVA_FILES} : %.class : %.java 
    ${JAVAC} ${CLASSPATH} ${<} 

只要你在串行執行的構建,這工作正常。然而,一旦依賴關係混入其中,就會變得更加成問題。

  1. C/C++編譯器擁有用於依賴生成的內置選項......對Java有類似的功能嗎?
  2. 是否有必要使用第三方工具(如Jikes)來生成依賴關係?
  3. 通常來說,如果一個團隊正在使用makefile來構建與java相關的任何東西,更典型的方式是調用java編譯器一次,在一個命令行中列出所有.java文件-vs-每個.class文件都有一個目標?
    • 如果這更爲常見,這是嚴格爲了簡單起見還是有更深的原因?
    • 注:據我所知,對於一個連續的構建,這將是更快的選擇,但我想要的答案,並行做實證檢驗構建

回答

0

它最終只是在一個構建步驟中指定所有源文件並允許javac以這種方式解決所有依賴關係,這是最有利的(並且是整個Java開發的標準)。

0

做這樣的事情

javac -cp MY_CLASSPATH Main.java 

大部分時間足夠了,因爲它可以自動解決相關性。有時您可能需要在命令行上使用更多文件,因爲其中一些文件可能沒有明確的引用而被使用。

還有antmavenivy等等,但對於簡單的東西來說這是一種矯枉過正。

+0

你確定自動依賴解析嗎?我可能會做錯事;假設Main.java依賴於從Blah.java生成的類文件,執行上述操作會抱怨丟失的符號,除非我先編譯Blah.java。 –

+0

我很確定,它一直爲我工作。假設Blah。當然可以找到java。 – maaartinus

1

我們的項目中有類似的問題。 我們決定通過ant構建所有java代碼,並從makefile中調用ant。

除非你有很多的JNI(C++ < ----> java)依賴關係,這也許對你也有效。

祝你好運。

+0

在完整的重寫過程中可能會出現這種情況,儘管肯定會有相當數量的JNI正在進行。 –