1、什麼是Mavenapache
Maven是基於 POM(工程對象模型),經過一小段描述來對項目的代碼、報告、文件進管理的一個跨平臺的項目管理工具。Maven主要有兩大功能:管理依賴、項目構建。api
2、Maven的安裝配置服務器
下載maven
http://maven.apache.org/download.cgiide
安裝過程直接解壓便可工具
配置環境變量測試
而後在Path中添加 %MAVEN_HOME%\bin阿里雲
測試url
在命令行窗口輸入:mvn -v 或 mvn -versionspa
配置Maven
一、全局配置
在 Maven 安裝目錄的 conf 裏面有一個 settings.xml 文件,這個文件就是 Maven 的全局配置文件。settings.xml文件中設置包含本地倉庫路徑、遠程倉庫服務器地址等配置信息。
二、用戶配置
用戶配置文件的地址:~/.m2/settings.xml,該文件默認沒有,須要將全局配置文件拷貝一份到該目錄下。若是用戶配置文件不存在,則使用全局配置文件的配置。
3、Maven 命令
Maven 命令要在 pom.xml 所在目錄中去執行
4、Maven的核心概念
一、座標
在 Maven 中,座標的做用就是定位一個惟一肯定的 jar 包。Maven世界擁有大量構建,經過座標,咱們就能從 Maven 倉庫中引用指定的 jar 包進行構建。
Maven 座標的組成
二、依賴管理
依賴範圍
依賴範圍用 scope 標籤來控制依賴和編譯,測試,運行的classpath的關係. 主要的是三種依賴關係以下:
依賴傳遞
某項目工程下有A、B、C三個模塊,B模塊依賴A模塊,C模塊依賴B模塊,那麼B模塊是C模塊的直接依賴,A模塊是C模塊的間接依賴。也就是說:
咱們分別在C模塊和B模塊的 pom.xml 文件中加入以下配置:
<dependencies> <dependency> <groupId>com.test.maven</groupId> <artifactId>B</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies>
<dependencies> <dependency> <groupId>com.test.maven</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies>
從上圖能夠看出,雖然C沒有直接依賴於A,可是經過簡介依賴,C也能夠調用A中的類和方法;
而後咱們在A模塊的 pom.xml 文件中引入 Junit4.12,以下:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency> </dependencies>
能夠看到:當 scope 標籤中的值爲 compile 時,直接依賴和間接依賴的模塊都能使用。
總結:
依賴衝突
跨 Pom 文件的衝突
A模塊的 Pom文件中依賴了 Junit 4.12版本,而B模塊的 Pom文件中依賴了Junit 4.10版本,那麼B 和 C都將使用 Junit 4.10版本,以下圖:
同一個 Pom 文件的衝突
B模塊的 Pom文件中依賴了Junit 4.10 和 Junit 4.12兩個版本,則以放在下面的版本爲準,就近原則。
可選依賴
Optional標籤標示該依賴是否可選,默認是false,表示該依賴會傳遞下去,若是爲true,則表示不會傳遞下去。
排除依賴
在 C模塊的 Pom 文件中加入 Exclusions 標籤排除 Junit 依賴
三、繼承
若是全部模塊都須要用到某個 jar 包,咱們只須要在工程那一級別的 Pom文件中設置便可。
把 A、B、C的依賴關係去掉,統一在工程的 Pom文件進行 jar 包的依賴設置,該工程下的全部模塊都能使用該 jar包了。
5、Maven 倉庫
什麼是 Maven倉庫
用來統一存儲全部Maven共享構建的位置就是倉庫。根據Maven座標定義每一個構建在倉庫中惟一存儲路徑大體爲:groupId/artifactId/version/artifactId-version.packaging;
倉庫的分類
6、遠程倉庫配置介紹
中央倉庫/遠程倉庫
從 Maven安裝沒了下的 conf 中拷貝setting.xml文件放入~/.m2/repository目錄下,在 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>central</id> <name>Maven Repository Switchboard</name> <url>http://repo1.maven.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror> <!-- 中央倉庫在中國的鏡像 --> <mirror> <id>maven.net.cn</id> <name>oneof the central mirrors in china</name> <url>http://maven.net.cn/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
本地私服
認證信息
<!--配置私服倉庫認證信息--> <servers> <server> <id>proj-releases</id> <username>deployment</username> <password>deployment</password> </server> <server> <id>proj-snapshot</id> <username>deployment</username> <password>deployment</password> </server> </servers>
配置私服地址
<profiles> <profile> <id>nexus</id> <!-- 配置使用公司私服進行jar包下載 --> <repositories> <repository> <id>nexus-pub</id> <name>Nexus-Pub</name> <url>http://192.168.0.1:8080/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <!-- 配置使用公司私服進行maven插件下載 --> <pluginRepositories> <pluginRepository> <id>nexus</id> <name>Nexus</name> <url>http://192.168.0.1:8080/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles>
咱們還能配置將包構建至私服
<distributionManagement> <repository> <id>releases</id> <name>public</name> <url>http://192.168.0.1:8080/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>snapshots</id> <name>Snapshots</name> <url>http://192.168.0.1:8080/nexus/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement>
distributionManagement包含repository和snapshotRepository子元素,前者表示發佈版本(穩定版本)構件的倉庫,後者表示快照版本(開發測試版本)的倉庫。這兩個元素都須要配置id、name和url,id爲遠程倉庫的惟一標識,name是爲了方便人閱讀,關鍵的url表示該倉庫的地址。
往遠程倉庫部署構件的時候,每每須要認證,配置認證的方式同上。
配置正確後,運行命令mvn clean deploy,Maven就會將項目構建輸出的構件部署到配置對應的遠程倉庫,若是項目當前的版本是快照版本,則部署到快照版本的倉庫地址,不然就部署到發佈版本的倉庫地址。