Maven開始逃離 XML 陣營
Maven,這個過去數十來年 Java 應用構建工具的事實標準,已經學會了處理非 XML 寫成的構建文件。我們熟知的 polyglot maven,可以通過使用插件來將它的 pom.xml 構建文件的表達方式替換為另一種語言。polyglot-maven-examples 這個示例源碼包含了替換為Atom、Scala、Groovy 和 YAML 版本的構建文件。基于 YAML 的構建文件如下
modelVersion: 4.0.0 groupId: io.takari.polyglot artifactId: yaml-project version: 0.0.1-SNAPSHOT name: 'YAML Maven Love'properties: {sisuInjectVersion: 0.0.0.M2a, teslaVersion: 3.1.0}</pre>
每一種語言都能提供它們自己的解析和處理機制,在使用 Scala 或 Groovy插件的時候,還可以編寫能在構建時運行的內聯代碼。因此,每個獨立項目都可以在構建文件中編寫自己的內聯代碼片段,而原本這些邏輯由于過于簡 單,并不適合作為插件來實現,但又無法簡單地采用內嵌的 Ant 腳本來實現。另外,你還可以采用那些支持特定語言語法的編輯器來編輯這些文件。這樣做既包含了 Maven 1 的靈活性(支持使用Jelly 來編寫內聯代碼),又包含了 Maven 2 的擴展(這一版本以插件形式來支持內聯代碼)。更多的支持正在計劃中,如無需 pom.xml 文件,就能直接從 Manifest.MF 構建 OSGi bundles的能力。
實現 ployglot maven 功能的代碼已經存在了一段時間,但是一直以來,要使用該功能卻并不簡單,因為需要為 Maven 的標準安裝添加補丁才能支持其它的 pom.xml 文件。而在 Maven 3.3 版本中,支持這些擴展功能的鉤子函數允許你即使在沒有特定 pom.xml 文件的情況下,便可將對擴展的變更添加到項目中。在 Maven 3.3 發布之后,如 Spring Hateoas 這些項目就將它們的 pom 文件轉換成了 Groovy 版本。
一般來說,插件是被添加到 pom.xml 文件中的,但如果一開始沒有 pom.xml 文件該怎么辦呢?這便是 Maven 帶來的一個關鍵更新 - 對核心擴展的添加。通過將一個 .mvn 文件夾添加到項目根目錄下,你邊能對開箱即用的 Maven 的運行機制進行調整。比如,你可以創建一個extensions.xml,允許將插件添加到構建時(采用核心擴展特性),然后依次通過插件來調用構建過程。如要讓上面的 YAML 構建生效,你的.mvn/extensions.xml 需要像下面這樣:
<?xml version="1.0" encoding="UTF-8"?> <extensions> <extension> <groupId>io.takari.polyglot</groupId> <artifactId>polyglot-yaml</artifactId> <version>0.1.5</version> </extension> </extensions>
這段代碼將觸發對 YAML 文件的加載,然后構造 Maven 項目模型以便構建能夠開始。可以采用任何工具來處理構建文件的內容;在對 JRuby 的處理中,會執行 Ruby 程序來計算依賴并設置需要的構建插件。
通過將構建過程委派給知道如何產生內容的工具,從而能導出編譯內容的結果(以及生成的 pom.xml 文件),這個 pom.xml 文件可以簡化為只用來代表項目的運行時依賴,從而兼容其它知道如何從這個被上傳到倉庫中的 pom.xml 中解析出依賴的工具。這樣它在給予 Gradle 或 Ant 以靈活性的同時,還能支持將標準處理工具導出到插件擴展。
另外,還能用核心擴展來為 Maven 命令行添加默認選項。比如,如果 Maven 項目需要比默認配置更大的堆,你無須在每個調用過程中指定 -Xmx(或讓用戶設置MAVENOPTS 或 JAVAOPTIONS 變量),你可以在項目根目錄添加 .mvn/jvm.config 文件,指定 JVM 需要的參數。
-Xmx2048m -Xverify:none -Djava.awt.headless=true
另外你還可以為 Maven 命令行選項設置參數,比如添加下面的代碼到.mvn/maven.config,你便可以非常簡潔地來調用多線程構建:
--threads 2C --quiet
當你每次從命令行運行 Maven 的時候,這些參數將被添加到所有參數的前面,這樣你能讓開發者們(以及服務器)的每次構建過程都保持一致。
Polyglot 和核心擴展特性需要 Maven 3.3.1 或以上版本,現已可以從maven.apache.org 網站上下載。
查看英文原文:Maven Escapes from XML
來自:http://www.infoq.com/cn/news/2015/03/maven-polyglot本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!