2012-10-22 89 views
0

我試圖用ant 1.8.1來執行java編譯。由於要求,我必須在一個循環中編譯多個java源文件夾(包含java文件)。這些文件夾名稱將從屬性文件中提到的java項目派生。從循環本身我需要執行java編譯。所以我使用了一個macrodef來傳遞java源代碼編譯所需的全部參數。從本質上說,我有一個主要的build.xml文件,我從中調用build_Compile.xml(負責確定要構建哪些Java項目及其相應的源文件夾,併爲每個項目循環執行編譯)。爲了達到這個目的,我使用了一個在包含一些macrodef的助手文件(Helper.xml)文件中定義的宏定義。循環中的Java編譯問題

但是,當我執行任務時,我收到一個錯誤,這意味着未正確找到java src路徑(作爲參數傳遞)。我注意到的是構建文件的路徑(我的所有build * .xml文件所在的地方)被附加到java src目錄路徑之前(作爲macrodef中的參數傳遞)。我打印的參數傳遞給macrodef看起來如預期。下面是我使用的Java源代碼編譯的代碼片段 -

..... .....

<javac srcdir="@{srcpath}" 
      destdir="./Temp/build/classes/" 
      includeAntRuntime="false" 
      classpath="${classpath}" 
      includes="${replacedartefacts}"> 
    </javac> 

對不起,漫長的故事。欣賞任何指針/指南。謝謝。

+0

你得到了什麼錯誤? – Markus

+0

嗨,我在一篇新文章中給出了所有細節 - 「Java編譯循環中的問題 - 續」。如果你遵循這一點,並且給我一些線索,那將會很棒。 – Samy

回答

1

我有點困惑循環的想法。有兩種方法可以考慮:

  • 您有一個項目,但根據項目編譯不同的源目錄。
  • 你有一個主人build.xml這就是調用一堆包含源文件夾來編譯的子項目。

在第一個示例中,每個<javac>調用都依賴於已編譯的類文件。在第二種情況下,您正在編譯的每組Java源代碼都是獨立的

您不會給出錯誤或者@{srcdir}這會有所幫助。

我注意到你有一個includes參數。這是要包含的java文件列表。我也注意到這是一個屬性。這意味着一旦設置就無法更改。爲什麼你有一個包含參數?如何指定要編譯的特定文件集合ALL項目會影響您想要執行的操作。這是一些值如*.java?這對於你編譯的每一組源目錄來說都是一樣的嗎?

這可能是${basedir}屬性的問題嗎?當您使用<ant><import>時,您的${basedir}被設置爲調用程序的${basedir},而不是被調用程序中的${basedir}

使用參數-d運行Ant。這將產生數百行輸出,但會顯示每次調用<javac>時發生的情況。如果您還發布了確切的錯誤信息,並且可能提供了有關如何設置項目的更多信息,我們可以爲您提供更多幫助。

談論循環,看看Ant-Contrib任務,特別是for任務。另請參閱Ant subant任務。 <for>任務爲您提供了一種輕鬆遍歷一系列目錄參數的方法。 <subant>任務是爲主版本構建子項目製作的。

+0

謝謝大衛。我在一篇新文章中提供了細節 - 「循環中的Java編譯問題 - 續」。如果你能看一看並提供你的評論,那會很棒。 – Samy