一、Maven簡介
Maven是一個Java項目的構建和管理工具。
二、Maven安裝
這裏講述ubuntu系統的安裝過程。
Maven依賴於Java,首先確保Java已經正確安裝,JAVA_HOME和PATH已經正確設置。
(1)從maven.apache.org下載maven安裝包apache-maven-3.0.5-bin.zip
(2)解壓到目錄/usr/local/apache-maven-3.0.5
(3)配置maven環境變量 M2_HOME=/usr/local/apache-maven-3.0.5,並將$M2_HOME/bin加入PATH路徑
(4)測試mvn --version
mvn --version
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 21:51:28+0800)
Maven home: /usr/local/apache-maven-3.0.5
Java version: 1.7.0_07, vendor: Oracle Corporation
Java home: /usr/jdk1.7.0_07/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-32-generic", arch: "amd64", family: "unix"
三、Maven配置
maven的配置有三個層次:
(1)項目:任何一個項目都有一個pom.xml文件
(2)用戶:~/.m2/setting.xml:當前用戶的maven配置
(3)全局:$M2_HOME/conf/setting.xml:如果沒有配置用戶級別的maven配置,則默認是該配置
maven中的重要的一個配置是本地倉庫(local repository),默認地址是~/.m2/repository。
可以根據需要自己配置 :
<localRepository>/path/to/local/repo</localRepository>
下載的構件將保存在該目錄下,本地生成的構建安裝時(mvn install)也將拷貝到該目錄下。
遠程倉庫的配置可以通過項目文件配置也可以通過setting.xml配置,詳細可參加私服配置一節。
四、Maven常用命令
0、mvn archetype:generate:創建mvn項目:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
1、mvn clean:清理項目文件
2、mvn compile:編譯
3、mvn test:測試
4、mvn package:打包,默認是jar包
5、mvn install:安裝到本地倉庫
6、mvn deploy:部署遠程倉庫
7、mvn eclipse:eclipse:構建eclipse項目
8、mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo:將maven本地倉庫加入到eclipse工作區。
五、Maven座標和依賴
管理項目依賴是Maven的核心功能之一。Maven是通過構件的座標來管理依賴的。任何一個構件都有一個唯一的座標:groupId、artifactId、version、[classifier]、packaging(默認是jar)
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.6.1</version>
<type></type>
<scope></scope>
<optional></optional>
<exclusions>
<exclusion>
</exclusion>
</exclusions>
</dependency>
其中groupId、artifactId和version是必不可少的。
type表示依賴的類型,也就是packaging的類型jar、war、ear等。默認是jar
scope表示依賴的範圍:包括compile、test、provided、runtime、system等。
optional表示依賴是否可選。
exclusions表示要排除的傳遞性依賴。
依賴常用命令:
mvn dependency:list
mvn dependency:tree
mvn dependency:analyze
六、MVN倉庫
Maven倉庫的構件存儲是文件系統存儲。Maven構件存儲在文件系統中的目錄格式爲:groupId/artifactId/version/artifactId-version-classifier.packaging。
Maven倉庫主要分爲本地倉庫和遠程倉庫。遠程倉庫可以爲中央倉庫、第三方倉庫、私服倉庫等
1、本地倉庫
本地倉庫的配置在~/.m2/settings.xml或者$M2_HOME/conf/settings.xml中的<localRepository>/path/to/local/repo</localRepository>。默認值是~/.m2/repository。
當maven根據座標尋找構件的時候,它會先從本地倉庫尋找,如果找不到則去遠程倉庫下載。
mvn install命令會將本地構件安裝到本地倉庫,供本機其他需要的項目使用。
遠程倉庫可以是中央倉庫、第三方倉庫也可以私服。
對於一個用戶來說,只能有一個本地倉庫,卻可以有多個遠程倉庫。
2、中央倉庫
中央倉庫是maven核心自帶的遠程倉庫(http://repo1.maven.org/maven2)。在默認配置下,當本地倉庫找不到構件的時候,它就從中央倉庫下載。
3、私服
爲了減輕中央倉庫的壓力,也爲了統一管理內部的構建,一般在局域網內自建私服。
當maven需要下載構件的時候,它會首先從私服下載,如果私服上不存在該構件,私服會從配置的遠程倉庫下載,然後再提供服務給本地maven。此外,一些無法從外部倉庫找到的構件也可以上傳到本地私服供內部使用。
4、第三方倉庫
有的時候中央倉庫無法滿足需要,需要從其他倉庫中下載,比如apache、jboss等
MVN遠程倉庫的配置方式
可以在pom.xml中配置:下面例子配置了一個本地私服。
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
也可以在settings.xml中配置
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
注意,別忘了激活
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
七、鏡像
鏡像可以提供原倉庫提供服務,比如中央倉庫在中國的鏡像的配置方式如下:
<mirrors>
<mirror>
<id>maven.net.cn</id>
<name>one of the central mirrors in China</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
鏡像一般結合私服使用,這樣私服可以作爲所有外部倉庫的鏡像:假設已經配置了名爲nexus的私服倉庫
<mirrors>
<mirror>
<id>nexus</id>
<url>http://10.241.227.69:8081/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>