閱讀440 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Maven官方文檔》插件的發展

來講解一下Maven 2.0 插件的發展

      maven中有一個核心引擎,它提供了基礎項目的處理能力和構建能力的管理,還有很多用於構建任務的插件。

那到底什麼是插件呢?

Maven 核心框架就是一個插件的集合。換而言之,這些插件就是行為的執行者,插件可以用於:創建jar文件,war文件,編譯代碼,單元測試,創建項目文檔等等。幾乎任何的行為,你都可以認為是這個項目在執行對應的Maven插件。

插件是Maven的核心特性並可以給多個項目重複使用。插件執行的這些行為包含在一個項目描述——項目對象模型(POM)。插件行為可以通過描述每個插件目標(或者是Mojo)的唯一參數而自己定製。

Maven 2.0 其中一個最簡單的插件就是clean插件。這個清除插件可以移除Maven 2 項目中target目錄東西。當你執行 “mvn clean”,Maven 2 執行這個“清除”目標,然後target目錄的內容就被清除了。這個清除插件定義一個參數可以用於自定義插件行為,這個參數被叫做輸出目錄和它默認為${project.build.directory}。

什麼是一個Mojo?(或者 為什麼命名為‘Mojo’)

Mojo開始被定義在Maven 2,插件程序由一係列的目標(Mojo)。Mojo可以定義在類似注釋的java類或Shell腳本。一個Mojo指定的元數據為 一個目標 :一個目標名,即合適的生命周期,和一些期望參數。

Mojo擔當著POJO(普通的JAVA對象),替代 “Maven”的普通。Mojo 也是一個好看的詞(看定義)。從維基百科,一個 “mojo” 定義就是“ 。。。一個人衣服下的小包一樣”(或者被稱為有魔力的手)。這些包通過超自然的力量,如同保護邪惡,帶來好運等。

比較 Maven 1.x 的插件

與Maven 1.x的相同之處

Maven 2.0與上一代相似的有兩個主要的功能。第一,它組織項目數據在連貫的整體上,和暴露這些數據用於構建過程。第二,Maven協調指揮一個插件在構建過程中的啟動和實際運作。

很多在Maven 2.0東西將會更簡單麵向Maven 1的用戶,和插件係統沒有異常。Maven 2插件體現了更好的表現相比於 1.x使用。好比在1.x 的插件,他們用著共同的項目信息和自定義配置執行工作。而Maven 2 插件是組織和執行連貫的方式來構建引擎的——也就是說,這個引擎是在插件執行之前,負責組織和填充插件的要求。

操作上,Maven 2.0 應該感覺像一個更高性能的Maven 1.0的兄弟。當pom發生改變,它將會基礎的安排和特征(和值得注意的條件)。無論如何,這就是相似的地方了。Maven 2.0 是一個完整的重新設計和Maven構建理念的實現。舉個例子,它有很多不同和很多發展架構——至少對於我們來說。

 

與Maven 1.x的差異

看著似乎相似的架構,Maven 2 提供了更多環境變量讓插件使用。新的架構提供管理生命周期,多種實現的語言,可重用性的係統,和更多優點。可以說最大的優點就是可以完全使用java寫maven插件,允許開發者可以開發充分發揮和製作測試工具來幫助自己。

在Maven 2.0 之前,構建係統組織相關插件在一個鬆散的生命周期裏,一些確定依賴目標的先決條件和裝飾用前目標和後目標。這個批判來自於Maven社區。這告訴我們通過可能100w中不同的構建情節,在構建中很多的行為適合分到少部分的分類。此外,這些適合目標的分類像是構建過程執行中的一個精確的預測。借鑒這些經驗,Maven 2.0 定義了管理生命周期的插件和相對應的位置。

Maven 2.0開始的時候,插件實現在不同的程序和不同腳本語言 但共存相同的構建過程。這除去一些插件開發者要學習特定語言的念頭更好與maven互動。由穩定性和語言豐富度來減少風險。

Maven 2.0開始的時候 是影響整合多項目直接進入構建的核心架構。在Maven 1.x,很多大項目分裂成相似的構建回避問題,例如 編譯一個子集的classes;劃分服務端和客戶端代碼;或者周期性依賴不同程序類庫。這個轉變讓創建額外的複雜構建,由於多次構建不得不創建一個整體的或一個以上的項目。當項目1.x版本確切時,多個新項目版本會時後聰明的時候。反應器創建作為適用於所有的功能,和多項目插件是後來加到反應器的設置裏作為一些公共的構建類型。無論如何,這個解決方案(隻是解決方法,再加上一些宏)從未集成這些多項目構建過程的想法到maven核心概念架構裏。

為什麼改變插件的架構?

看了前麵這些新版本的部分了,對比老版本總結優點:

  • 管理生命周期
  • 多種實現語言
  • 可重用的構建係統
  • 可以用java實現Maven插件
         Maven 1,插件的定義使用Jelly,雖然它可能是在java寫的一個插件,你還不得不與一些強製性的Jelly包裝你的插件腳本。在運行時解釋的基於XML的腳本語言不會是性能的最佳選擇,開發團隊認為采用一種方法允許插件開發人員從插件實現選擇數組中選擇是明智的。Maven 2的第一選擇應該是java插件,但您也可以使用一個支持的腳本語言如Beanshell。
        總結一下,開發團隊看見api裏一些關鍵的差距和1.0插件程序架構,團隊決定解決這些未來發展的不足,讓Maven作為一個好用的工具做更強大的事情。
轉載自 並發編程網 - ifeve.com

最後更新:2017-05-18 20:36:34

  上一篇:go  阿裏雙11大型項目管理怎麼玩?
  下一篇:go  《KAFKA官方文檔》5.2 APIs