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

Maven起步——教你開始使用Maven二(圖)

2013-11-23 20:40:57  來源: Java開源技術 

  現在運行jar目標並且看看Maven的輸出吧它將包含下面如下這些
  
  Attempting to download springcorejarK downloadedAttempting to download springwebjarK downloaded
  
  圖顯示了jar目標觸發的一系列事件
  
  Maven查看POM依據projectxml的定義看到在springframework組中的兩個人造物的依賴關系它將載你本地Maven的資源庫中檢查springcorejar和springwebjar
  
  當Maven找不到這些文件它將到尋找JAR文件這些JAR文件會被下載並放置於你本地Maven的資源庫中它們也被添加到你項目的classpath中下次在你的項目查詢這些文件時Maven將在你本地的資源庫中提供它們
  
 

  
Maven本地和遠程資源庫為test application項目提供的spring Jar

  
  剛剛發生了什麼?
  
  Maven為你節省了相當的時間和不必要的麻煩Maven到來之前依賴關系常常被捆綁到一個項目的目錄或者項目應該指向到添加正確的JAR到你的classpath使用Maven管理依賴關系顯然有著明顯的優勢作為初學者如果你的項目依賴個外部的JAR文件這就不需要在你的資源庫中存儲成兆的JAR文件這意味著當你在項目的外部檢查資源控制的時候更少的存儲空間和更快的下載時間另外如果你有多個項目依賴相同的外部依賴Maven僅需要下載一次依賴關系並且每個項目引用一個單獨的副本在你本地的資源庫中當依賴關系能夠從Maven資源庫遠程下載的時候沒有強制的原因讓你存儲你項目的依賴關系的版本
  
  當Maven下載依賴關系其在你本地的機器上從遠程的Maven資源庫拷貝一個文件到你本地的Maven資源庫Maven如何定位依賴關系的?它使用projectxml中dependency元素的信息如圖所示
  
 

  
POM和Maven資源庫的映射

  
  指定的groupId告訴Maven查看特定的目錄springframework指定type告訴Maven查找特定的子目錄如jar和war(注意s是Maven附加到type元素上的)本例中type是被忽略的JAR類型是默認類型當你指定了artifactId你正告訴Maven哪個文件將從jar目錄下載頂級目錄表現為組標示符JAR文件名的第一部分表現為artifact標示符文件名最後的部分包括擴展名表現為version標示符Maven使用下面的公式來決定一個來自於資源庫中的依賴關系[REPO_ROOT]參考你遠程的資源庫
  
  [REPO_ROOT]/<groupId>/<type>s/<artifactId><currentVersion><type>
  
  提示
  
  Maven的說明中資源庫可能開始於類似Java包的結構作為springframework的替代groupId被提議的結構為orgspringframework另外每個版本將有一個分隔目錄用以增加Maven資源庫的效率更多有關改變的提交建議參見 MAVEN/Repository+Layout++Final
  
  一個本地的資源庫來處理依賴關系在Unix機器上你的Maven資源庫能在~/maven/repository目錄找到在Windows機器上你的Maven的資源庫在你的%USERPROFILE%目錄如果你看一看本地Maven的資源庫你將會注意到它正包含一個springframework的目錄%USERPROFILE%\maven\repository\springframework\jars目錄包含springcore依賴關系的兩個springcorejar文件和springcorejarmd文件其包含MD文件用於驗證sprintcore JAR文件的完整性Maven 當前並沒有使用MD來驗證完成品的完整性但在將來的版本可能會用其來驗證完成品的完整性
  
  提示
  
  在Windows機器上%USERPROFILE%通常決定於C\Documents and Settings\vmassol這種目錄%USERPROFILE%被用在Unix的主目錄(%USERPROFILE% isused in the spirit of the abbreviation for a Unix home directory
  
  關於使用id元素?
  
  如果你工作在現存的Maven項目你可能有依賴關系使用id元素下面的dependencies元素示范了使用單獨id元素來附加Jakarta Commons Math的版本<dependencies><dependency><id>commonsmath</id><version></version></dependency></dependencies>單獨使用id元素工作僅在groupId和artifactId匹配時如果你浏覽Maven資源庫你將看到下面的目錄結構
  
  /commonsmath
  /jars
  commonsmathjar
  commonsmathjar
  
  使用id元素工作單獨的id標記已經不被贊成使用並在Maven 中消失當你看到別的Maven項目中使用dependencies的速記符號時請嘗試使用groupId和artifactId來標識你的依賴關系
  
  依賴快照
  
  如果你開發的程序依賴的依賴關系經常改變你可能想將依賴的每個依賴關系替代為最近構件的硬編碼的版本在一個項目依賴的依賴關系還處在beta的版本或你正開發一系列項目依賴的Maven項目時時特別有用這將在第章論述本實驗你將學習到如何依靠快照
  
  我該如何做?
  
  在你的依賴關系塊兒中指定一個明確的版本使用SNAPSHOT關鍵字作為版本名稱的一部分每次你執行Maven目標時Maven將從遠程資源庫中檢查較新的依賴關系如果遠程資源庫的版本較新Maven將下載其到本地資源庫例如下面的依賴關系將一直下載spring的新版JAR文件
  <dependency>
  <groupId>springframework
  </groupId>
  <artifactId>spring
  </artifactId>
  <version>SNAPSHOT
  </version>
  </dependency>
  
  剛剛發生了什麼?
  
  當你使用SNAPSHOT依賴關系你正告訴Maven使用遠程資源庫的最新版本在你使用多項目插件或者當你依賴的一個完成品尚處於開發階段這將得心應手在你工作的團隊僅有較少的開發者組成時最好也常這麼做你將使用SNAPSHOT依賴關系當你的項目依賴一個最近的開發或者非正式版本的特別組件SNAPSHOT依賴關系應該在開發階段被保留並且概括說你不用改發布一個依賴於SNAPSHOT依賴關系的項目
  
  執行脫機構建
  
  如果你需要在一個離線的情況下使用Maven你可能需要知道如何確使Maven不檢查最新的SNAPSHOT依賴關系本實驗將向你展示如何用Maven執行脫機構建
  
  我該如何做?
  
  這個方法很簡單僅僅使用o命令行選項例如如果你沒有網絡連接但又想執行測試目標運行Maven o testMaven將執行這個test目標而不檢查依賴關系如果你的項目沒有依賴SNAPSHOT構建你也可以斷看你的環境來添加o標志如果你依賴SNAPSHOT構建你將需要使用o標志Maven將在每次執行目標時嘗試檢查最新的SNAPSHOT在這種情況下不使用o標志本項目將不會構建成功
  
  關於 執行離線構建如果你不想下載任何完成品?
  
  當然這將不會工作離線構建的工作你必須已經有必需的依賴關系在你本地的資源庫項目最簡單的獲得Maven下載依賴
  
  關系的方法是在每個Maven項目實例簡單的運行noop目標build:start這個目標執行之前任何其它的目標並不執行任何動作如果你運行build:startMaven將從projectxml獲得獲取任何依賴關系
  
  使用Maven控制台
  
  如果你再三的從命令行運行Maven你可以通過Maven控制台來節省時間Maven控制台提供一個外殼在這你可以鍵入目標的名稱來執行Maven通過使用Maven可以避免每次載你想運行一個Maven目標時Java Virtual Machine(JVM)啟動的等待
  
  我該如何做?
  
  Maven Console是一個插件你可以通過鍵入maven console在命令提示符這將產生下面的輸出
  __ __
  | \/ |__ _Apache__ ___
  | |\/| / _` \ V / _) \ ~ intelligent projects ~
  |_| |_\___|\_/\___|_||_| v The following commands are available:list list all available goalshelp this message<goalname> attain a goalquit quits the consoletestapplication >
  
  目前你可以在命令行執行任何你能執行的目標開始是一下鍵入 java:compileMaven將執行 java:compile目標並返回提示符其它的目標在一個序列中運行兩個目標你可以在提示符處輸入它們通過空格例如 clean test眾所周知作為goal chaining這是你想通過Maven獲得指定一系列目標的方法退出Maven Console鍵入quit查看有效目標列表鍵入list
  
  剛剛發生了什麼?
  
  在Maven Console下Maven執行java:compile目標非常之快不信麼?當你使用Maven Console時你所執行的目標是在一個現成的JVM下當你從命令行運行Maven時你每次運行一個目標都不得不等待JVM的啟動如果你不確信其對性能的提升自己試試看在命令行下運行java:complie 再在Maven Console下同樣運行java:compile 注意時間的差別你將發現JVM啟動的時間開始增加如果你找到你自己常用的Maven目標Maven Console將通過啟動JVM一次為來節省時間
  
  生成Eclipse項目
  
  我打賭你一定想在IDE下工作Maven通過插件來與EclipseInelliJIDEAJBuilderJDeveloper以及Emacs集成Maven很好的與全部這些工作集成本實驗關注
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28895.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.