2008-11-12 13 views
1

我想創建一個Ant構建文件,其中包含一些文件作爲一種插件。我可以在運行時找到並將文件導入Ant構建文件嗎?

因此,如果我想激活項目中的功能 - 比如說pmd-checking - 我將pmd.xml複製到一個目錄中,並且build.xml接受啓動想法,pmd.xml存在並導入它,這樣可以爲構建提供新的目標。

但「導入」任務只能用作頂級任務,所以我不知道如何重新設置此功能。這是可能的螞蟻,如果是這樣,我該怎麼做?

編輯:我寧願有一個解決方案,允許新目標出現在ant -p列出的列表中。

回答

2

在導入任務文檔中沒有明確說明,但該任務接受一個文件集作爲單個文件的替代文件。 因此這一點,在頂層,應該做的伎倆,並創建目標由ant -p上市:本

<property name="plugins.dir" value="plugins" /> 
<fileset id="plugin.modules" dir="${plugins.dir}"> 
    <include name="**/*.xml" /> 
</fileset> 

<import> 
    <fileset refid="plugin.modules" /> 
</import> 

一個皺紋是必須有至少一個插件,在「插件」目錄,否則導入將失敗。 您只需創建一個佔位符文件 - 比如所謂empty.xml

<project /> 

一旦在那裏,你只需要投入任何新的插件的插件目錄,以及將來的版本,他們將被導入。

3

您可以使用ant任務,甚至參數化目標名稱。這裏有一個例子:

<ant antfile="plugins/pmd.xml" target="${pmd-target}"/> 

如果你想要更多的靈活性,我建議檢查gantgradle

+0

這是一個可能的解決方案,但新的目標不在'ant -p'列表中。 – Mnementh 2008-11-13 00:57:03

0

我不確定你想要的是概念上可行的。 -p命令行參數不執行任何任務,它只是解析文件。你想要的東西需要執行。

但是,我會給ant-contrib項目一看。它有一個條件<if>任務,這可能會使頂級導入僅在需要時才能工作。

3

import任務的文檔中,請注意optional屬性。將其設置爲true,缺少包含將不會破壞構建。

因此,如果找到pmd.xml,但如果不是,則不會破壞構建。

未經測試,因此我不確定ant -p包括導入文件中的目標(如果找到)。

+0

'ant -p'列出在導入文件中定義的目標。我沒有看到這個屬性,這有點幫助。但我更喜歡,如果我可以在運行時獲得插件。 – Mnementh 2008-11-13 07:21:30

+0

構建文件如何知道何時包含該文件?您將需要傳遞一個屬性作爲參數,並將一些條件目標放入構建文件中。這隻會在執行時才起作用,而不是「-p」選項「。 請給出關於用例的更多細節。 – 2008-11-13 13:11:13

相關問題