maven:
是apache下的一個開源項目,是純java開發,而且只是用來管理java項目的,Maven是跨平臺的項目管理工具。java
1.自動化構建和項目管理工具程序員
Ant→Make→Maven→Gradlespring
2.Maven概述apache
①讀音:妹文、麥文api
②Maven做用一:自動化構建tomcat
③Maven做用二:依賴管理[多了重複、少了報錯]服務器
④Maven做用三:項目信息管理maven
3.自動化構建ide
①構建[build]:將程序員編寫的代碼從源文件到服務器部署的整個過程。工具
清理→編譯→測試→報告→打包→部署→運行……
②自動化構建:將構建過程當中的各個操做步驟交給構建工具自動完成。
4.Maven的好處?
節省空間
就是對jar包的統一管理就是對jar包的統一管理,依賴管理
一鍵構建,
可跨平臺
5.Maven的用途
①項目構建:項目構建指的是程序模塊從清理、編譯直到部署的整個過程。
②依賴管理:Maven可以提供自動的依賴管理,將所須要的JAR自動導入到工程中,根據既定的規則很好的解決JAR包之間的衝突。
③項目信息管理:Maven可以提供高質量的項目信息,包括依賴關係、測試報告、站點信息等詳細內容,並自動生成靜態頁面,拷貝到服務器上就能夠直接使用。
①要求當前系統環境下配置了JAVA_HOME
在CMD命令行中輸入:echo %JAVA_HOME% 若是能出來JDK的安裝目錄,說明咱們配置了JAVA環境
②將Maven的ZIP壓縮包解壓到一個非中文無空格目錄下【maven.apache.org官方網站下載jar包】
apache-maven-3.3.9-bin.zip
③.配置環境變量,用mvn -v查看是否正確配置了maven【要配置jdk, maven3.3.9這個版本所需的jdk版本必需要1.7以上】
M2_HOME:
D:\DevSoft\apache-maven-3.3.9
path:
%M2_HOME%\bin;
mvn -v查看maven版本
④.先了解一下maven的目錄結構:
projectname
-src
-main
-java
-package
-resources【配置文件或者說資源文件】
-test
-java
-package
-resources
pom.xml
按照上面的maven的目錄結構建立一個maven項目,參照word文檔!
⑤當針對某個Maven工程執行諸如「編譯」、「測試」、「打包」、「部署」等命令時,須要進入到pom.xml所在的目錄下執行。
mvn compile
1.座標
①數學座標:平面中使用橫縱兩個座標系能夠惟一的定位平面中的任何一個點。
向量x:橫座標
向量y:縱座標
②使用三個向量在Maven倉庫中惟一的定位一個Maven工程。
向量groupid:公司或組織的名稱+項目名稱
向量artifactId:模塊名稱
向量version:模塊版本
<groupId>com.neuedu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
③如何根據座標zhao到倉庫中查找對應的Maven工程
座標
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
倉庫中的路徑
org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar
④如何查找指定jar包的座標:
1.從maven倉庫下載
http://search.maven.org/
http://mvnrepository.com/【建議使用這個】
①做用:保存Maven工程
②分類
[1]本地倉庫:爲當前電腦上全部Maven工程服務【本地倉庫的配置只須要修改settings.xml文件就能夠】
[2]遠程倉庫[私服]:爲當前局域網中的全部Maven工程服務器,公司維護
[3]中央倉庫:爲全世界全部的Maven工程服務
[4]中央倉庫的鏡像:內容和中央倉庫同樣,架設在全世界各個大洲,讓Maven用戶能夠就近獲取須要的Maven資源,同時也可以減輕中央倉庫的壓力。
③jar包的查找過程
首先在本地倉庫中查找,若是找不到就到局域網中的私服中去找,還找不到就鏈接中央倉庫或鏡像。從中央倉庫或鏡像中找到後,若是局域網中架設了私服,就保存到私服上,
下次同一局域網中的其餘用戶直接從私服上下載便可,沒必要鏈接中央倉庫或鏡像了。若是局域網中沒有架設私服,則保存在本地倉庫中。
④Maven工程分類
[1]Maven用戶本身開發的工程
[2]Maven的插件
[3]使用Maven構建獲得的第三方jar包
⑤能夠修改Maven默認的本地倉庫路徑,使其指向一個提早下載好的目錄
配置文件路徑
Maven解壓目錄/conf/settings.xml
修改
<localRepository>D:\Maven\Repository</localRepository>
clean 刪除target目錄
compile 編譯
test 測試,先執行compile,再執行test
package 打包(並將jar包放入到target的目錄中),先執行compile,而後執行test,最後執行package
install 安裝jar包到本地倉庫中
mvn deploy
site 生成一個站點,先執行compile,而後執行test,而後執行package,最後執行site
①Maven爲了可以將構建過程自動化處理,定義了三個主要的生命週期。其中定義了相關的構建過程。
②三個生命週期
[1]清理週期clean
[2]站點週期site
[3]默認週期default
③最重要的特色:每一個生命週期中執行任何一個操做,都是從這個生命週期最初的位置開始執行,直到到達命令指定的位。
一、使用座標引用依賴的項目
依賴聲明主要包含以下元素:
1 <dependencies> 2 <dependency> 3 <groupId>junit</groupId> 4 <artifactId>junit</artifactId> 5 <version>4.10</version> 6 <scope>test</scope> 7 </dependency> 8 </dependencies>
二、依賴方式
[1]在pom.xml配置文件中使用dependencies/dependency元素配置依賴信息
[2]經過目標jar包的座標找到被依賴的文件
三、依賴範圍
在依賴聲明中,scope標籤指定的就是當前項目在什麼狀況下對目標項目有依賴。可選值包括:compile、test、provided、runtime等
1.默認compile:當前所依賴的jar包是當前Maven工程中全部類都須要使用的,最終也須要參與打包。
2.test:只是當前工程中的測試類須要,最終不參與打包。
3.provided:當工程在服務器上運行起來後,能夠由服務器提供,因此也只是在開發或測試時使用,部署到服務器上時就不須要。
一個本身開發的Maven工程,須要執行「安裝」命令,纔可以被放入到倉庫中。
四、依賴複雜性
[1]路徑最短者優先
MakeFriends --------> HelloFriends----------->Hello
| |
log4j.2.1.14 log4j.2.1.17
[2]路徑相同時,先聲明者優先
MakeFriends --------> HelloFriends ------>log4j.2.1.14
|
-------------->OurFriends ------->log4j.2.1.12
五、版本衝突的解決方案
[1]調節原則:
[1]路徑最短者優先原則
[2]路徑相同時,先聲明者優先原則
[2]排除原則
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
<!--這裏不須要指定版本號 -->
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>
[3]版本鎖定原則
<dependencyManagement>
<dependencies>
<dependency>
<!--jar包座標 -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</dependencyManagement>
版本鎖定以後,後面再使用到這個的 依賴的時候,就不要寫版本號了!
並且若是有多個相同的須要鎖定的jar包的版本號一致的話,咱們能夠單獨提取到properties標籤中,
在properties標籤中,子標籤本身定義,標籤的值就是版本號,下面只須要在依賴的地方用${}引用就能夠了!
①目的一:將pom.xml文件中重複的信息統一提取到父工程中,簡化pom.xml中的配置
②目的二:將各個子工程都須要依賴的jar包提取到父工程中統一管理
③注意:父工程打包的方式——pom,表示這是一個管理其餘工程的工程
< packaging>pom</ packaging>
④指定當前工程的父工程
<parent >
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 如何經過當前工程的pom.xml文件找到父工程的pom.xml文件 -->
<!-- 配置父工程的pom.xml文件相對於當前工程pom.xml文件的相對路徑 -->
<relativePath> ../Parent/pom.xml</relativePath >
</parent >
在tomcat運行一遍,用插件運行一遍
解決-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.
1.添加M2_HOME的環境變量
2.Preference->Java->Installed JREs->Edit 選擇一個jdk,
添加 -Dmaven.multiModuleProjectDirectory=$M2_HOME
繼承練習:
①新建Maven項目Parent
②修改Parent/pom.xml的<packaging>jar</packaging>爲<packaging>pom</packaging>,代表這不是一個普通的Java工程或Web工程,而是管理其餘Maven工程的工程。
③刪除子項目中的重複內容,提取依賴信息
④在子項目POM中,添加
<parent>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<relativePath>從當前目錄到父項目的pom.xml文件的相對路徑</relativePath>
</parent>
注意:此時若是安裝某個項目報錯,則是由於Parent工程沒有安裝
⑤發現子項目中依賴的包和項目有問題
⑥將Parent項目中的dependencies標籤,用dependencyManagement標籤括起來
⑦在子項目中從新指定須要的依賴,刪除範圍和版本號