Apache Ant 中的 ProjectHelper
負責解析建置檔案並建立代表建置工作流程的 Java 實例。它也會指出它可以解析哪種類型的檔案,以及預期哪個檔案名稱為預設輸入檔案。
Ant 的預設 ProjectHelper
(org.apache.tools.ant.helper.ProjectHelper2
) 會解析常見的 build.xml
檔案。如果命令列中未指定建置檔案,它會預期找到名為 build.xml
的檔案。
此類抽象化的直接好處是,它可以讓 Ant 了解 XML 以外的其他描述性語言。已經針對純 Java 前端和 Groovy 前端進行一些實驗(請向開發人員寄件清單詢問這些實驗的進一步資訊)。
從 Ant 1.8.2 開始,import 任務也會嘗試使用適當的輔助程式來解析匯入的檔案。因此,可以使用不同的語言撰寫不同的建置檔案,並讓它們互相匯入。
Ant 了解 ProjectHelper
的多種實作,並且必須決定對每個建置檔案使用哪一種實作。
在啟動時,Ant 會列出找到的所有實作,並按照在內部「儲存庫」中找到的順序將它們保留在同一個順序中。
org.apache.tools.ant.ProjectHelper
宣告的屬性(請參閱 Java 系統屬性);ProjectHelper
服務宣告:它會在類別路徑中搜尋檔案 META-INF/services/org.apache.tools.ant.ProjectHelper。此檔案只會包含要實例化的 ProjectHelper
實作的完整限定名稱;ProjectHelper
服務宣告;ProjectHelper
,它可以解析傳統的 build.xml 檔案。
如果在嘗試實例化 ProjectHelper
時發生錯誤,Ant 會記錄錯誤,但不會停止。如果您想要進一步的 ProjectHelper
內部「儲存庫」偵錯資訊,請使用系統屬性 ant.project-helper-repo.debug
並將其設定為 true
;然後也會列印完整的堆疊追蹤。
當預期 Ant 會解析檔案時,它會要求 ProjectHelper
儲存庫尋找能夠解析輸入檔案的實作。實際上,它只會反覆運算已排序的清單,而第一個回傳 true
給 supportsBuildFile(File buildFile)
的實作將會被選取。
當 Ant 啟動且未指定輸入檔案時,它會搜尋預設輸入檔案。它會反覆運算 ProjectHelper
清單,並選取第一個預期實際存在的預設檔案的清單。
類別 org.apache.tools.ant.ProjectHelper
是預期要實作的 API。因此,透過延伸那個抽象類別來撰寫您自己的 ProjectHelper
。然後,預期您至少要實作函式 parse(Project project, Object source)
。另請注意,您的實作會由 Ant 執行個體化,而且它預期有一個沒有參數的預設建構函式。
有一些函式可以協助您定義您的輔助程式能夠做什麼,以及它預期的是什麼
getDefaultBuildFile()
:定義如果沒有提供時預期的檔案名稱supportsBuildFile(File buildFile)
:定義您的剖析器是否可以剖析輸入檔案canParseAntlibDescriptor(URL url)
:您的實作是否能夠剖析給定的 Antlib 描述符。基底類別傳回 false
parseAntlibDescriptor(Project containingProject, URL source)
:如果您的實作對前一個方法傳回 true,就會呼叫來實際剖析 Antlib 描述符。
現在您已經準備好您的實作,您必須向 Ant 宣告它。這裡有三個解決方案
org.apache.tools.ant.ProjectHelper
(另請參閱 Java 系統屬性);