熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Java深入:在Eclipse中如何利用Maven

2013-11-23 20:19:18  來源: Java開源技術 

  Maven 將作為一個普通的構建系統被人們重新認識並且它將超越 Java技術本文不打算成為一篇 Maven 教程而是將 Maven 與其他技術進行比較讓您洞察 Maven 與 Eclipse 相適應的地方以及如何使這些工具相互協作
  
  在過去幾年中Maven 已經不僅僅是 Java 世界的一個時髦話題 年起Maven 已經成為構建工具領域的先驅最近幾年人們常拿它與 Ant 比較因為 Maven 與 Ant 有一些顯而易見的相似之處所以拿它們倆作比較似乎是很自然的事
  
  比如說在兩種情況下XML 腳本都是可用的兩種工具都可以生產工件它們還可以共享相同的分類法和概念比如 項目(project)目標(target)與 目標(goal)以及 依賴關系(depends) 和 先決條件(prereqs)但它們實質上有很大的差別
  
  Ant 只是一個 XML 腳本工具而 Maven 是一個普通的構建工具它關注的重點是一個叫做項目對象模型(POM)的概念POM 暴露的是粗粒度的面向構建的任務這些任務被稱為目標它們提供了一些准則幫助您開發構建方法和實現最佳實踐
  
  在某些方面Maven 屬於軟件工廠盡管目前它仍在外圍更確切地說諸如 Maven 之類的構建工具是軟件工廠領域中必不可少的
  
  軟件工廠
  
  通過顯著提高自動開發的級別軟件工廠提供了一個花費更少更靈活的應用程序開發方法根據 Software Factories Web 站點的說法軟件工廠是一個軟件產品線它根據構建特殊種類的應用程序的方法配置一些可擴展的開發工具……提供打包的內容……以及指導
  
  軟件工廠涉及三個主要概念
  
  模式提供了一些元數據描述組成應用程序的不同工件的結構以及它們是如何交互的 一個或多個模板提供了啟動程序工具箱以及構建應用程序所需的其他任何東西 可擴展的開發環境用於配置定制和裝配組件
  
  如今這類工具已經逐漸引起了認識到它們的價值的那些工具制造人員工具開發人員和軟件編輯的注意這些工具促進了軟件開發過程的工業化降低了投入市場的成本和時間同時還提高了生產率加快了對進化需求的反應
  
  仔細查看一下 Maven 的主要特性您就會認識到 Maven 與軟件工廠之間的相似之處Maven 使用 POM 作為元數據來描述項目結構並通過通用應用程序插件來獲得可擴展的項目模板
  
  因為 Maven 非常靈活並且是開放源碼的所以很容易推斷和設想 Maven 是軟件工廠平台中的一個核心組件但是還有另一種說法上述類比並不完全因為目前的 Maven 缺乏專用的開發環境而這類環境有助於創建特定於域或特定於企業的插件和模板並允許您輕松地配置項目或定制行為
  
  不過Maven 的主要目標是標准化構建過程並保證代碼構建測試部署(CBTD)循環中的質量和易再現性(easy reproducibility)它還可以制定度量標准幫助您了解開發狀態
  
  CBTD 本體論在軟件工程領域已經不再新鮮但 Maven 可以使您標准化這種本體論並通過抽象這種理論將它想像成一個完整的實體考慮到不斷增長的項目的復雜性標准化成為一種迫切需要
  
  擴建的概念我們稱之為元構建因為其無可估量的價值以及保證下一級質量的特性正逐漸被人們認識持續集成(continuous integration)就是建立在這個概念的基礎之上但它也應用了在 IDE 上下文之外的地方進行構建的能力
  
  模糊的界限
  
  使用過 Java 技術的人應該都聽說過 Eclipse 年年中的時候Eclipse 推出了它的第一個版本標志其成熟的是它為集成開發環境(IDE)提供了一個機會特別是為 Java 開發人員(不嚴謹地說)提供了一個機會
  
  Eclipse 是一種開放的以語言為中心的平台也可以將它用作教育性項目和研究項目的基礎平台其中一些平台捐贈給了 Eclipse 團體
  
  就像 Microsoft已經采用軟件工廠方法一樣Eclipse 也開始轉向模型驅動開發(MDD)方向並且最近已經公布了一個新的項目提議 —— 模型驅動的開發集成(MDDi)
  
  根據該提議Eclipse MDDi 項目專用於平台的實現……其設計目標是支持各種建模語言(統一建模語言或特定於域的語言)和模型驅動的技術
  
  漸漸地一些工具開始假定某些特性可以完全並且順利地集成在一起Maven 和 Eclipse(即使作為一個簡單的 IDE)也不例外因此從構建的角度來看二者似乎出現了重疊如圖 所示
  

  
擴建的概念

  
  圖描述的實際上是以前討論的擴建概念正如以前定義的那樣整個擴建過程包括幾個任務同時還表示了一個元構建實例任務可以是以下兩種類型之一原子任務是細粒度的並且是上下文不明確的這種任務的兩個實例幾乎是相同的宏觀任務是復合任務它充當微觀任務的容器
  
  構建從擴展的意義上說只處理宏觀任務原子任務的觸發取決於配置這意味著用戶對系統有著較高層次的看法這使得系統更易於維護和發展
  
  此外Maven 和 Eclipse 都是開放的並且很容易通過插件擴展它們使其滿足您的需要但是因為它們針對的受眾不同所以它們之間的相似性也到此為止多數 Eclipse 最終用戶是一些開發人員而 Maven 主要針對的是一些構建管理人員
  
  盡管如此Maven 仍然是一個命令行工具雖然圖形用戶界面(GUI)是按照 Jason Van Zyl(Maven 的制造者和架構師)指示的方向開發的但 Maven 目前仍然沒有幫助用戶執行特殊任務的特定 GUI比如創建或更新配置或者只用一個鼠標單擊發起構建
  
  上面描述的典型構建順序在 Eclipse 中不像在 Maven 中那麼順利Eclipse 的特性之一是開發 環境造成構建過程不連續這要歸因於一些人為因素並不是每次成功編譯之後都進行測試所有測試沒必要一次運行可以跳過一些微觀任務等等
  
  各種因素都會導致產生差異這就是為什麼開發人員每天至少必須運行一次完整的構建過程以確信他們沒有破壞什麼的原因
  
  不過因為 Eclipse 是一個可擴展平台所以它受到許多用戶社區的支持這使它成為駐留 Maven 驅動的開發允許開發人員和構建管理人員以某種簡單的方式進行協作的理想之地
  
  將 Maven 集成到 Eclipse 中 Mevenide 是 Codehaus 主辦的一個項目旨在通過將 Maven 集成到 IDE 中簡化 Maven 的使用
  
  現在Borland Software 的 JBuilderNetBeans 和 Eclipse 都受到支持其他一些項目也部分地將 Maven 集成到 Eclipse 中這樣就可以與 Mevenide(如 Maven Workshop)共享一些特性除了增加 Maven 的易用性之外為什麼需要這種插件?
  
  通過提供一些工具和視圖讓您了解 Maven 隱藏的復雜性並改進團隊環境中的協作Mevenide for Eclipse 提高了生產率
  
  從協作的角度來看假如構建已經被 Maven 化了那麼最有用的特性就是 Eclipse 項目元數據與 Maven 元數據之間的雙向同步如果開發人員忘記在向 Eclipse 中添加一個依賴關系之後更新 POM那麼該怎麼辦?
  
  如果重構無法傳播到 Maven該怎麼辦?構建可能會中斷或者一些單元測試可能被拒絕因此真的需要使 Eclipse 元數據和 Maven 元數據保持同步Mevenide 監聽元數據的變化並使您能夠很容易地確定元數據不匹配的地方這可以防止進行被嚴重破壞的構建
  
  但 POM 並不只是關於依賴關系和項目布局的它還包含一些不用於結構上的項目管理信息比如版本號名稱ID 和源儲存庫的位置Eclipse 元數據並不總是反映所有這些信息
  
  因此需要另一個編輯這些信息的方法為此Mevenide 提供了一個圖形編輯器該編輯器使 POM 的維護變得更容易並允許您避開一些煩瑣的容易出錯的原始 XML 手工編輯每個 POM 語義部分都被表示為一個編輯器頁這增強了模型的整體可靠性
  
  此外為了最大限度地減少創建 POM 的無聊過程Mevenide 提供了一個相當簡單的可擴展的 POM 模板機制
  
  阻止 Maven 在 Eclipse 之外的地方運行的能力是從類似 Mevenide 的插件中最容易獲得的一項功能您可以選擇某些執行任務(用 Maven 的術語來講是 目標)這些任務可以是通過 Maven 插件全局定義的任務也可以是依賴於項目的任務或者您可以通過定義構建敏感的變量來定制構建
  
  Eclipse 控制台上只顯示了一些相關的選項(即在 IDE 的上下文中相關)對於其他任何插件控制台上只輸出構建日志這一特性非常重要因為它避免了在控制台與 Eclipse 之間不停地來回奔波
  
  Mevenide 還集成了其他許多幫助方法特性但它們不是很重要例如您可以定義給定目標與文件模式之間的關系這樣就可以根據工作空間增加的增量來激活那些任務
  
  您還可以浏覽工件儲存庫或者根據名稱搜索某個給定的工件(一個工件 就是一個構建結果它可以是 JAR 文件可執行文件或者是一個完整的 Web 站點)然後可以重定向到 Mevenide 站點獲得完整的特性列表
  
  不過仍然還有一個問題即使 Mevenide 增強了生產率和易用性但您仍然必須認識到哪些工具可以在特殊環境中滿足您的需要通過 Maven Console 運行 Maven 會話可能非常耗時所以為了獲得較高的生產率在對會話進行編碼期間應該改為使用 JUnit 集成的 Eclipse 支持來運行測試並依賴於 Eclipse 的內部編譯器來生成可執行的文件
  
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28300.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.