Maven系列一:基礎知識

一、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>








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章