專案jar包管理構建工具---Maven
一、what is Maven?
我們來尋找一下官網,裡面介紹了maven到底是什麼?下面一句話就有講解到:Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. 這句話什麼意思是,翻譯過來就是說 :Apache Maven是基於專案物件模型(POM project object model),可以通過一小段描述資訊(配置)來管理專案的構建,報告和文件的軟體專案管理工具。
Maven的核心功能便是合理敘述專案間的依賴關係,通俗點講,就是通過pom.xml檔案的配置獲取jar包,而不用手動去新增jar包。
二、maven的安裝以及使用
1)、第一步,下載maven
以下提供maven官方下載地址:http://maven.apache.org/download.cgi,方便大家下載最新的maven包。
右頁面往下翻就能找到下面的內容。
2)、配置環境變數
win10--》此電腦 --》右鍵 --》屬性 --》高階系統設定 --》高階 --》找到環境變數,在系統變數中新建系統變數,變數名為MAVEN_HOME,變數值為maven的安裝路徑,如圖所示:
這是我安裝maven的路徑。在系統檔案中找到path變數名,編輯,在path環境變數最後附加上";%MAVEN_HOME%\bin";開啟cmd,在控制檯上面輸入“ mvn -version ”,如果出現下面的圖,則表示成功;
當執行完畢,會在當前使用者目錄下生成一個“ .m2 ”目錄,,該目錄下會生成一個maven倉庫目錄(repository),如果在該目錄下建立setting.xml檔案,那麼在maven在載入的過程中會優先載入該setting.xml檔案。
3)、maven載入順序
maven載入順序是第一會去尋找使用者目錄下的那個".m2"目錄的setting.xml檔案,如果沒有該xml檔案,則會去尋找我們maven安裝目錄下的conf目錄中的setting.xml檔案。載入過程圖如下所示:
4)、配置setting.xml
我們需要在setting.xml檔案中配置本地倉庫(<localRepository>),值指向的是本地倉庫目錄路徑,比如:<localRepository>D:\maven_repository</localRepository>,這是我配置本地倉庫的例子;為了加速maven專案中jar包的下載速度,我們可以配置映象,在setting.xml檔案中找打“<mirrors>”結點,在該結點內部配置映象,下面提供相關映象,便於大夥們提高開發效率。
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>ui</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://uk.maven.org/maven2/</url>
</mirror>
<mirror>
<id>osc</id>
<mirrorOf>central</mirrorOf>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
<mirror>
<id>osc_thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>
</mirrors>
5)、配置代理伺服器(可選)
maven專案在編譯、測試、打包裡,會需要從maven的中央倉庫(即:maven組織公佈在網際網路上的一個站點,裡面已經收錄了目前絕大多數主流的jar包)下載jar包等檔案,如果使用代理伺服器上網,需要配置代理伺服器。
把%MAVEN_HOME%\conf\settings.xml複製一份到本地倉庫C:\Users\當前使用者名稱\.m2\下,然後編輯該檔案,找到下面這段
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->
</proxies>
把註釋去掉,host這裡填寫代理伺服器的地址(可以用IP)以及port埠,如果需要使用者名稱/密碼認證,則填寫username/password節點,否則username/password這二個節點去掉,nonProxyHosts表示某些地址不需要經過代理伺服器,多個地址之間用|分隔,支援萬用字元,比如172.156.*
6)、maven中setting.xml配置檔案中的配置元素
1.localRepository:
表示Maven用來在本地儲存資訊的本地倉庫的目錄。預設是使用者家目錄下面的.m2/repository目錄。
2.interactiveMode:
表示是否使用互動模式,預設是true;如果設為false,那麼當Maven需要使用者進行輸入的時候,它會使用一個預設值。
3.offline:
表示是否離線,預設是false。這個屬性表示在Maven進行專案編譯和部署等操作時是否允許Maven進行聯網來下載所需要的資訊。
4.pluginGroups:
在pluginGroups元素下面可以定義一系列的pluginGroup元素。表示當通過plugin的字首來解析plugin的時候到哪裡尋找。pluginGroup元素指定的是plugin的groupId。預設情況下,Maven會自動把org.apache.maven.plugins和org.codehaus.mojo新增到pluginGroups下。
5.proxies:
其下面可以定義一系列的proxy子元素,表示Maven在進行聯網時需要使用到的代理。當設定了多個代理的時候第一個標記active為true的代理將會被使用。下面是一個使用代理的例子:
<proxies>
<proxy>
<id>xxx</id>
<active>true</active>
<protocol>http</protocol>
<username>使用者名稱</username>
<password>密碼</password>
<host>代理伺服器地址</host>
<port>代理伺服器的埠</port>
<nonProxyHosts>不使用代理的主機</nonProxyHosts>
</proxy>
</proxies>
6.servers:
其下面可以定義一系列的server子元素,表示當需要連線到一個遠端伺服器的時候需要使用到的驗證方式。(當你配置了私服伺服器,而登入私服伺服器的時候需要使用者名稱和密碼。)這主要有username/password和privateKey/passphrase這兩種方式。以下是一個使用servers的示例:
<servers>
<server>
<id>id</id>
<username>使用者名稱</username>
<password>密碼</password>
</server>
</servers>
7.mirrors:
用於定義一系列的遠端倉庫的映象。以下是一個使用mirrors的例子:
<mirrors>
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>定義一個容易看懂的名稱 </name>
<url>http://my.repository.com/repo/path</url>
</mirror>
</mirrors>
id:是用來區別mirror的,所有的mirror不能有相同的id
mirrorOf:用來表示該mirror是關聯的哪一個倉庫,其值為其關聯倉庫的id。當要同時關聯多個倉庫時,這多個倉庫之間可以用逗號隔開;當要關聯所有的倉庫時,可以使用“*”表示;當要關聯除某一個倉庫以外的其他所有倉庫時,可以表示為“*,!repositoryId”;當要關聯不是localhost或用file請求的倉庫時,可以表示為“external:*”。
url:表示該映象的url。當Maven在建立系統的時候就會使用這個url來連線到我們的遠端倉庫。
8.profiles:
用於指定一系列的profile。profile元素由activation、repositories、pluginRepositories和properties四個元素組成。當一個profile在settings.xml中是處於活動狀態並且在pom.xml中定義了一個相同id的profile時,settings.xml中的profile會覆蓋pom.xml中的profile
activation:這是profile中最重要的元素。跟pom.xml中的profile一樣,settings.xml中的profile也可以在特定環境下改變一些值,而這些環境是通過activation元素來指定的。
看下面一個例子:
<profiles> <profile> <id>test</id> <activation> <activeByDefault>false</activeByDefault> <jdk>1.6</jdk> <os> <name>Windows 7</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> <property> <name>mavenVersion</name> <value>2.0.3</value> </property> <file> <exists>${basedir}/file2.properties</exists> <missing>${basedir}/file1.properties</missing> </file> </activation> ... </profile> </profiles>
在上面這段程式碼中,當所有的約束條件都滿足的時候就會啟用這個profile。
jdk:表示當jdk的版本滿足條件的時候啟用,在這裡是1.6。這裡的版本還可以用一個範圍來表示,如
<jdk>[1.4,1.7)</jdk>表示1.4、1.5和1.6滿足;
<jdk>[1.4,1.7]</jdk>表示1.4、1.5、1.6和1.7滿足;
os:表示當作業系統滿足條件的時候啟用。
property:property是鍵值對的形式,表示當Maven檢測到了這樣一個鍵值對的時候就啟用該profile。
①下面的示例表示當存在屬性hello的時候啟用該profile。
<property> <name>hello</name> </property>
②下面的示例表示當屬性hello的值為world的時候啟用該profile。
<property> <name>hello</name> <value>world</value> </property>
這個時候如果要啟用該profile的話,可以在呼叫Maven指令的時候加上引數hello並指定其值為world,如:mvn compile –Dhello=world
file:表示當檔案存在或不存在的時候啟用,exists表示存在,missing表示不存在。如下面的例子表示當檔案hello/world不存在的時候啟用該profile。
<profile> <activation> <file> <missing>hello/world</missing> </file> </activation> </profile>
activaByDefault:當其值為true的時候表示如果沒有其他的profile處於啟用狀態的時候,該profile將自動被啟用。
properties:用於定義屬性鍵值對的。當該profile是啟用狀態的時候,properties下面指定的屬性都可以在pom.xml中使用。
repositories:用於定義遠端倉庫的,當該profile是啟用狀態的時候,這裡面定義的遠端倉庫將作為當前pom的遠端倉庫。
<repositories> <repository> <id>codehausSnapshots</id> <name>Codehaus Snapshots</name> <releases> <enabled>false</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>never</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> <url>http://snapshots.maven.codehaus.org/maven2</url> <layout>default</layout> </repository> </repositories>
releases、snapshots:這是對於工件的型別的限制。
enabled:表示這個倉庫是否允許這種型別的工件
updatePolicy:表示多久嘗試更新一次。可選值有always、daily、interval:minutes(表示每多久更新一次)和never。
checksumPolicy:當Maven在部署專案到倉庫的時候會連同校驗檔案一起提交,checksumPolicy表示當這個校驗檔案缺失或不正確的時候該如何處理,可選項有ignore、fail和warn。
pluginRepositories:在Maven中有兩種型別的倉庫,一種是儲存工件的倉庫,另一種就是儲存plugin外掛的倉庫。pluginRepositories的定義和repositories的定義類似,它表示Maven在哪些地方可以找到所需要的外掛。
activeProfiles:底包含一系列的activeProfile元素,表示對於所有的pom都處於活躍狀態的profile。如:
<activeProfiles> <activeProfile>alwaysActiveProfile</activeProfile> <activeProfile>anotherAlwaysActiveProfile</activeProfile> </activeProfiles>