Maven簡(jiǎn)介
Maven的本質(zhì)是一個(gè)項(xiàng)目管理工具,將項(xiàng)目開(kāi)發(fā)和管理過(guò)程抽象成一個(gè)項(xiàng)目對(duì)象模型(POM:Project Object Model)
這玩意兒是使用Java開(kāi)發(fā)的,所以采用的就是Java的思想:面向?qū)ο?/p>
Maven的作用:
- 項(xiàng)目構(gòu)建:提供標(biāo)準(zhǔn)的、跨平臺(tái)的自動(dòng)化項(xiàng)目構(gòu)建方式
- 依賴管理:方便快捷的管理項(xiàng)目依賴的資源(jar包),避免資源間的版本沖突問(wèn)題
- 統(tǒng)一開(kāi)發(fā)結(jié)構(gòu):提供標(biāo)準(zhǔn)的、統(tǒng)一的項(xiàng)目結(jié)構(gòu)
下載與安裝:
Maven基礎(chǔ)概念

倉(cāng)庫(kù):用于存儲(chǔ)資源,包含各種jar包
倉(cāng)庫(kù)分類:本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)(私服和中央倉(cāng)庫(kù))
坐標(biāo):Maven中的坐標(biāo)用于描述倉(cāng)庫(kù)中資源的位置
坐標(biāo)的主要組成:
- groupId:定義當(dāng)前Maven項(xiàng)目隸屬組織名稱(通常是域名反寫(xiě))
- artifactId:定義當(dāng)前Maven項(xiàng)目名稱(通常是模塊名稱)
- version:定義當(dāng)前版本號(hào)
- packaging:定義該項(xiàng)目的打包方式
坐標(biāo)的作用:使用唯一的標(biāo)識(shí),唯一性定位資源位置,通過(guò)該標(biāo)識(shí)可以將資源的識(shí)別與下載交由機(jī)器完成。
倉(cāng)庫(kù)配置:
- 本地倉(cāng)庫(kù)配置:默認(rèn)位置與自定義位置
- 遠(yuǎn)程倉(cāng)庫(kù)配置:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://maven.aliyun.com/repository/central</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
鏡像倉(cāng)庫(kù)配置:阿里云Maven鏡像倉(cāng)庫(kù)配置地址
<mirrors>
<mirror>
<!-- 此鏡像的唯一標(biāo)識(shí)符,用來(lái)區(qū)分不同的mirror元素 -->
<id>nexus-aliyun</id>
<!-- 對(duì)那種倉(cāng)庫(kù)進(jìn)行鏡像(就是替代哪種倉(cāng)庫(kù))-->
<mirrorOf>central</mirrorOf>
<!-- 鏡像名稱 -->
<name>Nexus aliyun</name>
<!-- 鏡像URL -->
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
全局setting和用戶setting
- 定義當(dāng)前計(jì)算機(jī)中Maven的公共配置,即 mavne安裝目錄/conf/setting.xml
- 定義當(dāng)前用戶配置,即 配置的本地倉(cāng)庫(kù)地址處有個(gè)平級(jí)的setting.xml
注:用戶setting和全局setting不一致時(shí),會(huì)優(yōu)先采用用戶setting.xml的配置,因此最好是這二者內(nèi)容保持一致
Maven項(xiàng)目
手動(dòng)生成Maven項(xiàng)目
Maven工程目錄結(jié)構(gòu)
Maven項(xiàng)目構(gòu)建命令:Maven構(gòu)建命令使用mvn開(kāi)頭,后面加功能參數(shù),可以一次執(zhí)行多個(gè)命令,使用空格分隔
mvn compile # 編譯
mvn clean # 清理
mvn test # 測(cè)試
mvn package # 打包
mvn install # 安裝到本地倉(cāng)庫(kù)
IDEA生成Maven項(xiàng)目
使用原型創(chuàng)建Maven項(xiàng)目與不使用原型創(chuàng)建Maven項(xiàng)目
例:使用原型創(chuàng)建web項(xiàng)目,選擇archetype-webapp進(jìn)行項(xiàng)目創(chuàng)建,添加Tomcat插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
依賴管理
-
依賴配置:依賴指的是當(dāng)前項(xiàng)目運(yùn)行所需要的jar,一個(gè)項(xiàng)目可以設(shè)置多個(gè)依賴。格式:
<!--設(shè)置當(dāng)前項(xiàng)目所依賴的所有jar--> <dependencies> <!--設(shè)置具體的依賴--> <dependency> <!--依賴所屬群組id--> <groupId></groupId> <!--依賴所屬項(xiàng)目id--> <artifactId></artifactId> <!--依賴版本號(hào)--> <version></version> <!-- <type>pom</type> <scope>import</scope> 只能用在 <dependencyManagement></dependencyManagement> 中 --> <!--類型:jar 則導(dǎo)入jar包 pom 導(dǎo)入的是一個(gè)父模塊--> <type></type> <!-- 作用域:import 代表把父模塊中的jar包導(dǎo)入進(jìn)來(lái) 為import時(shí),dependency不參與依賴傳遞 只是把dependency需要的依賴都取過(guò)來(lái),像個(gè)占位符一樣替換了就行 --> <scope>import</scope> </dependency> </dependencies> -
依賴傳遞
依賴具有傳遞性,包括直接傳遞和間接傳遞
直接傳遞:在當(dāng)前項(xiàng)目中通過(guò)依賴配置建立的依賴關(guān)系(A使用B,A和B就是直接傳遞)
間接傳遞:被依賴的資源如果依賴其他資源,當(dāng)前項(xiàng)目間接依賴其他資源(比較拗口,意思是如果A依賴B,而B(niǎo)依賴C,那么A和C之間就是間接傳遞)

依賴傳遞的沖突問(wèn)題:
- 路徑優(yōu)先:當(dāng)依賴中出現(xiàn)相同的資源時(shí),層級(jí)越深,優(yōu)先級(jí)越低,層級(jí)越淺,優(yōu)先級(jí)越高
- 聲明優(yōu)先:當(dāng)資源在相同層級(jí)被依賴時(shí),配置順序靠前的覆蓋配置順序靠后的
- 特殊優(yōu)先:當(dāng)同級(jí)配置了相同資源的不同版本,后配置的覆蓋先配置的
- 可選依賴
可選依賴指的是對(duì)外隱藏當(dāng)前所依賴的資源
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!--添加下面這一行-->
<optional>true</optional>
</dependency>
- 排除依賴
排除依賴指主動(dòng)斷開(kāi)依賴的資源,被排除的資源無(wú)需指定版本
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
</dependency>
- 依賴范圍
依賴的jar包默認(rèn)情況可以在任何地方使用,可以通過(guò)scope標(biāo)簽設(shè)定其作用范圍
作用范圍:
- 主程序范圍有效(main文件夾范圍內(nèi))
- 測(cè)試程序范圍有效(test文件夾范圍內(nèi))
- 是否參與打包(package文件夾范圍內(nèi))
還有兩個(gè):system、import
- import:依賴項(xiàng)替換為指定 POM 的
<dependencyManagement>中的該依賴項(xiàng)。僅<dependencyManagement>部分中 pom 類型的依賴項(xiàng)支持此范圍
- 依賴范圍傳遞性:帶有依賴范圍的資源在傳遞時(shí),作用范圍會(huì)受到影響

生命周期與插件
Maven項(xiàng)目構(gòu)建生命周期描述的是一次構(gòu)建過(guò)程經(jīng)歷了多少個(gè)事件

Maven對(duì)項(xiàng)目構(gòu)建的生命周期劃分為3套
- clean:清理工作
- default:核心工作,例如編譯、測(cè)試、打包、部署等
- site:產(chǎn)生報(bào)告,發(fā)布站點(diǎn)等
clean生命周期:
- pre-clean:執(zhí)行一些需要在clean之前完成的工作
- clean:移除所有上一次構(gòu)建生成的文件
- post-clean:執(zhí)行一些需要在clean之后立刻完成的工作
default構(gòu)建生命周期:compile ——> test-compile ——> test ——> package ——> install
-
validate(校驗(yàn)) 校驗(yàn)項(xiàng)目是否正確并且所有必要的信息可以完成項(xiàng)目的構(gòu)建過(guò)程
-
initialize(初始化) 初始化構(gòu)建狀態(tài),比如設(shè)置屬性值
-
generate-sources(生成源代碼) 生成包含在編譯階段中的任何源代碼
-
process-sources(處理源代碼) 處理源代碼,比如說(shuō),過(guò)濾任意值
-
generate-resources(生成資源文件) 生成將會(huì)包含在項(xiàng)目包中的資源文件
-
process-resources (處理資源文件) 復(fù)制和處理資源到目標(biāo)目錄,為打包階段最好準(zhǔn)備
-
compile(編譯) 編譯項(xiàng)目的源代碼
-
process-classes(處理類文件) 處理編譯生成的文件,比如說(shuō)對(duì)Java class文件做字節(jié)碼改善優(yōu)化
-
generate-test-sources(生成測(cè)試源代碼) 生成包含在編譯階段中的任何測(cè)試源代碼
-
process-test-sources(處理測(cè)試源代碼) 處理測(cè)試源代碼,比如說(shuō),過(guò)濾任意值
-
generate-test-resources(生成測(cè)試資源文件) 為測(cè)試創(chuàng)建資源文件
-
process-test-resources(處理測(cè)試資源文件) 復(fù)制和處理測(cè)試資源到目標(biāo)目錄
-
test-compile(編譯測(cè)試源碼) 編譯測(cè)試源代碼到測(cè)試目標(biāo)目錄
-
process-test-classes(處理測(cè)試類文件) 處理測(cè)試源碼編譯生成的文件
-
test(測(cè)試) 使用合適的單元測(cè)試框架運(yùn)行測(cè)試(Juint是其中之一)
-
prepare-package(準(zhǔn)備打包) 在實(shí)際打包之前,執(zhí)行任何的必要的操作為打包做準(zhǔn)備
-
package(打包) 將編譯后的代碼打包成可分發(fā)格式的文件,比如JAR、WAR或者EAR文件
-
pre-integration-test(集成測(cè)試前) 在執(zhí)行集成測(cè)試前進(jìn)行必要的動(dòng)作。比如說(shuō),搭建需要的環(huán)境
-
integration-test(集成測(cè)試) 處理和部署項(xiàng)目到可以運(yùn)行集成測(cè)試環(huán)境中
-
post-integration-test(集成測(cè)試后) 在執(zhí)行集成測(cè)試完成后進(jìn)行必要的動(dòng)作。比如說(shuō),清理集成測(cè)試環(huán)境
-
verify (驗(yàn)證) 運(yùn)行任意的檢查來(lái)驗(yàn)證項(xiàng)目包有效且達(dá)到質(zhì)量標(biāo)準(zhǔn)
-
install(安裝) 安裝項(xiàng)目包到本地倉(cāng)庫(kù),這樣項(xiàng)目包可以用作其他本地項(xiàng)目的依賴
-
deploy(部署) 將最終的項(xiàng)目包復(fù)制到遠(yuǎn)程倉(cāng)庫(kù)中與其他開(kāi)發(fā)者和項(xiàng)目共享
site生命周期:
-
pre-site 執(zhí)行一些需要在生成站點(diǎn)文檔之前完成的工作
-
site 生成項(xiàng)目的站點(diǎn)文檔
-
post-site 執(zhí)行一些需要在生成站點(diǎn)文檔之后完成的工作,并且為部署做準(zhǔn)備
-
site-deploy 將生成的站點(diǎn)文檔部署到特定的服務(wù)器上
插件:插件與生命周期內(nèi)的階段綁定,在執(zhí)行到對(duì)應(yīng)的生命周期時(shí)執(zhí)行對(duì)應(yīng)的插件功能
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<!--執(zhí)行插件-->
<executions>
<!--具體怎么執(zhí)行-->
<execution>
<!--目標(biāo):執(zhí)行什么-->
<goals>
<!--執(zhí)行jar-->
<goal>jar</goal>
</goals>
<!--執(zhí)行到那個(gè)生命周期階段時(shí)就要執(zhí)行該插件 對(duì)應(yīng)前面default中的那些值-->
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
<goal>jar</goal>值選項(xiàng):官網(wǎng):Apache Maven Source Plugin
- source:aggregate aggregrates sources for all modules in an aggregator project.
- source:jar is used to bundle the main sources of the project into a jar archive——對(duì)main中源代碼打包
- source:test-jar on the other hand, is used to bundle the test sources of the project into a jar archive——對(duì)測(cè)試代碼打包
- source:jar-no-fork is similar to jar but does not fork the build lifecycle.
- source:test-jar-no-fork is similar to test-jar but does not fork the build lifecycle.
聚合
作用:聚合用于快速構(gòu)建Maven工程,一次性構(gòu)建多個(gè)項(xiàng)目/模塊
制作方式:創(chuàng)建一個(gè)空模塊,打包類型定義為pom
<packaging>pom</packaging>
定義當(dāng)前模塊進(jìn)行構(gòu)建操作時(shí)關(guān)聯(lián)的其他模塊名稱
<modules>
<module>模塊地址</module>
<module>模塊地址</module>
<module>模塊地址</module>
<module>模塊地址</module>
</modules>
注意:參與聚合操作的模塊最終執(zhí)行順序與模塊間的依賴關(guān)系有關(guān),與配置順序無(wú)關(guān)
繼承
作用:通過(guò)繼承可以實(shí)現(xiàn)在子工程中沿用父工程中的配置(與Java類似)
制作方式:在子工程中生命其父工程坐標(biāo)與對(duì)應(yīng)的位置
<!--定義該工程的父工程-->
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!--填寫(xiě)父工程的pom文件-->
<relativePath>父工程pom文件地址</relativePath>
</parent>
在父工程中定義依賴管理
<!--聲明此處進(jìn)行依賴管理-->
<dependencyManagement>
<!--具體的依賴-->
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</dependencyManagement>
<!--要管理插件的話,使用如下方式-->
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!--.....................-->
</plugin>
</plugins>
</pluginManagement>
</build>
繼承依賴使用:在子工程中定義依賴關(guān)系,無(wú)需聲明依賴版本,版本參照父工程中依賴的版本
<!--子工程使用依賴-->
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>
<!--子工程使用插件-->
<build>
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<!--<version></version>-->
</plugin>
</plugins>
</build>
繼承的資源:

繼承與聚合的區(qū)別
作用:聚合用于快速構(gòu)建項(xiàng)目,繼承用于快速配置
相同點(diǎn):
-
聚合與繼承的pom.xml文件打包方式均為pom,可以將兩種關(guān)系制作到同一個(gè)pom文件中
-
聚合與繼承均屬于設(shè)計(jì)型模塊,并無(wú)實(shí)際的模塊內(nèi)容
不同點(diǎn):
-
聚合是在當(dāng)前模塊中配置關(guān)系,聚合可以感知到參與聚合的模塊有哪些
-
繼承是在子模塊中配置關(guān)系,父模塊無(wú)法感知哪些子模塊繼承了自己
屬性
- 自定義屬性
作用:等同于定義變量,方便統(tǒng)一維護(hù)
定義格式:
<!--定義自定義屬性-->
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
<junit.version>4.12</junit.version>
</properties>
調(diào)用格式:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
- 內(nèi)置屬性
作用:使用Maven內(nèi)置屬性,快速配置
調(diào)用格式:
${basedir}
${version}
- Setting屬性
作用:使用Maven配置文件setting.xml中的標(biāo)簽屬性,用于動(dòng)態(tài)配置
調(diào)用格式:
${settings.localRepository}
- Java系統(tǒng)屬性
作用:讀取Java系統(tǒng)屬性
調(diào)用格式:
${user.home}
系統(tǒng)屬性查詢方式:
mvn help:system
- 環(huán)境變量屬性
作用:使用Maven配置文件setting.xml中的標(biāo)簽屬性,用于動(dòng)態(tài)配置
調(diào)用格式:
${env.JAVA_HOME}
環(huán)境變量屬性查詢方式:
mvn help:system
版本管理
SNAPSHOT(快照版本):
- 項(xiàng)目開(kāi)發(fā)過(guò)程中,方便團(tuán)隊(duì)成員合作,解決模塊間相互依賴和實(shí)時(shí)更新的問(wèn)題,開(kāi)發(fā)者對(duì)每個(gè)模塊進(jìn)行構(gòu)建的時(shí)候,輸出的臨時(shí)性版本就叫快照版本(測(cè)試階段版本)
- 快照版本會(huì)隨著開(kāi)發(fā)的進(jìn)展不斷更新
RELEASE(發(fā)布版本):
- 項(xiàng)目開(kāi)發(fā)到進(jìn)入階段里程碑后,向團(tuán)隊(duì)外部發(fā)布較為穩(wěn)定的版本,這種版本所對(duì)應(yīng)的構(gòu)建文件是穩(wěn)定的,即便進(jìn)行功能的后續(xù)開(kāi)發(fā),也不會(huì)改變當(dāng)前發(fā)布版本的內(nèi)容,這種版本就叫發(fā)布版本
工程版本號(hào)約定:
資源配置
配置文件引用pom屬性
作用:在任意配置文件中加載pom文件中定義的屬性
- pom中定義變量:
<properties>
<jdbc.username>root</jdbc.username>
<jdbc.password>zixieqing072413</jdbc.password>
</properties>
- pom中開(kāi)啟配置文件加載pom屬性
<build>
<!--配置資源文件對(duì)應(yīng)的信息-->
<resources>
<resource>
<!--設(shè)定配置文件對(duì)應(yīng)的位置目錄 如 application.yml
支持使用屬性動(dòng)態(tài)設(shè)定路徑 如 ${project.basedir}-->
<directory>地址</directory>
<!--開(kāi)啟對(duì)配置文件的資源加載過(guò)濾-->
<filtering>true</filtering>
</resource>
</resources>
<!--test配置文件也需要使用時(shí):配置資源文件對(duì)應(yīng)的信息-->
<testResources>
<testResource>
<!--設(shè)定配置文件對(duì)應(yīng)的位置目錄 如 application.yml
支持使用屬性動(dòng)態(tài)設(shè)定路徑 如 ${project.basedir}-->
<directory>地址</directory>
<!--開(kāi)啟對(duì)配置文件的資源加載過(guò)濾-->
<filtering>true</filtering>
</testResource>
</testResources>
</build>
- 在需要使用變量得到配置文件中使用,調(diào)用格式:
${地址}
<!--示例-->
${jdbc.username}
多環(huán)境開(kāi)發(fā)配置
<!--創(chuàng)建多環(huán)境-->
<profiles>
<!--定義具體的環(huán)境:生產(chǎn)環(huán)境-->
<profile>
<!--定義環(huán)境對(duì)應(yīng)的唯一名稱 如 prod_env-->
<id>開(kāi)發(fā)環(huán)境名稱1</id>
<!--定義環(huán)境中的專用的屬性值-->
<properties>
<jdbc.url>jdbc鏈接</jdbc.url>
</properties>
<!--將該套環(huán)境設(shè)為默認(rèn)啟動(dòng)環(huán)境-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--定義具體的環(huán)境:開(kāi)發(fā)環(huán)境 格式同上-->
</profiles>
Maven使用命令啟動(dòng)那套環(huán)境:
mvn 指令 -p 環(huán)境定義id
# 示例
mvn install -p prod_env
跳過(guò)測(cè)試
提示
正式開(kāi)發(fā)時(shí),不建議跳過(guò)
跳過(guò)測(cè)試的場(chǎng)景:
- 整體模塊功能未開(kāi)發(fā)
- 模塊中某個(gè)功能未開(kāi)發(fā)完畢
- 單個(gè)功能更新調(diào)試導(dǎo)致其他功能失敗
- 快速打包
- .........................
使用方式:
- 命令的方式
mvn 指令 –D skipTests
# 示例
mvn install –D skipTests
注意
執(zhí)行的指令生命周期必須包含測(cè)試環(huán)節(jié)
- 使用IDEA界面操作

- 使用pom配置
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<!-- 設(shè)置跳過(guò)測(cè)試 -->
<skipTests>true</skipTests>
<!-- 包含指定的測(cè)試用例 -->
<includes>
<include>**/User*Test.java</include>
</includes>
<!-- 排除指定得到測(cè)試用例 -->
<excludes>
<exclude>**/User*TestCase.java</exclude>
</excludes>
</configuration>
</plugin>
私服
使用Nexus,是sonatype的產(chǎn)品:
- 下載地址1:https://help.sonatype.com/repomanager3/download
- 下載地址2:https://www.sonatype.com/thanks/repo-oss
啟動(dòng)服務(wù)器(Windows):
nexus.exe /run nexus
訪問(wèn)服務(wù)器:默認(rèn)端口8081,可在其配置文件中修改
http://localhost:8081
修改基礎(chǔ)配置信息:安裝路徑/etc/nexus-default.properties,如默認(rèn)端口號(hào)
修改服務(wù)器運(yùn)行配置:安裝路徑/bin/nexus.vmoptions,如默認(rèn)內(nèi)存空間大小
IDEA中資源上傳和下載
私服倉(cāng)庫(kù)分類:
宿主倉(cāng)庫(kù)(hosted):保存無(wú)法從中央倉(cāng)庫(kù)獲取的資源,如
- 自主研發(fā)
- 第三方非開(kāi)源項(xiàng)目
代理倉(cāng)庫(kù)(proxy):代理遠(yuǎn)程倉(cāng)庫(kù),通過(guò)Nexus訪問(wèn)其他公共倉(cāng)庫(kù)
倉(cāng)庫(kù)組(group):
- 將若干倉(cāng)庫(kù)組成一個(gè)群組,簡(jiǎn)化配置
- 倉(cāng)庫(kù)組不保存資源,屬于設(shè)計(jì)型倉(cāng)庫(kù)

私服用戶名密碼:配置在本地倉(cāng)庫(kù)的setting.xml中即可
上傳位置:配置在IDEA中,上傳到私服中的倉(cāng)庫(kù)組不同
下載地址:配置在本地倉(cāng)庫(kù)的setting.xml即可
訪問(wèn)私服配置
- 配置本地倉(cāng)庫(kù)訪問(wèn)私服權(quán)限(setting.xml)
<servers>
<server>
<!--放release版本的 和nexus中命名保持一致-->
<id>zixq-release</id>
<!--訪問(wèn)私服的用戶名密碼-->
<username>admin</username>
<password>admin</password>
</server>
<server>
<!--放snapshots版本的-->
<id>zixq-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
- 配置本地倉(cāng)庫(kù)來(lái)源(setting.xml)
<!--可以和阿里云倉(cāng)庫(kù)同時(shí)存在-->
<mirrors>
<mirror>
<id>nexus-zixq</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
IDEA發(fā)布依賴到私服配置
- 配置當(dāng)前項(xiàng)目訪問(wèn)私服上傳資源的保存位置(pom.xml)
<distributionManagement>
<repository>
<!--倉(cāng)庫(kù)id,和上面本地倉(cāng)庫(kù)setting.xml中server id保持一致-->
<id>zixq-release</id>
<!--放release版?zhèn)}庫(kù)的url-->
<url>http://localhost:8081/repository/zixq-release/</url>
</repository>
<snapshotRepository>
<id>zixq-snapshots</id>
<url>http://localhost:8081/repository/zixq-snapshots/</url>
</snapshotRepository>
</distributionManagement>
- 發(fā)布資源到私服的命令
mvn deploy
流程:通過(guò)IDEA pom中配置的<url>http://localhost:8081/repository/zixq-release/</url>訪問(wèn)私服,通過(guò)<id>zixq-release</id>去本地倉(cāng)庫(kù)的setting.xml 的server id找訪問(wèn)私服的username、password,然后進(jìn)行發(fā)布
IDEA插件之Maven Helper
Maven Helper可以解決依賴問(wèn)題,安裝了Maven Helper插件,只要打開(kāi)pom文件,就可以打開(kāi)該pom文件的Dependency Analyzer視圖,并且這個(gè)頁(yè)面還支持搜索。很方便
進(jìn)入Dependency Analyzer視圖之后有三個(gè)查看選項(xiàng),分別是:
- Conflicts:沖突
- All Dependencies as List:列表形式查看所有依賴
- All Dependencies as Tree:樹(shù)結(jié)構(gòu)查看所有依賴


jar包沖突說(shuō)明
解決IDEA中jar包沖突,使用maven的插件:maven helper插件,它能夠給我們羅列出來(lái)同一個(gè)jar包的不同版本,以及它們的來(lái)源,但是對(duì)不同jar包中同名的類沒(méi)有辦法
依賴順序
點(diǎn)擊【All Dependencies as Tree】,查看:從上向下,A依賴于B,B依賴于C

.點(diǎn)擊【Conflicts】,從圖中可以看出有哪些jar存在沖突,存在沖突的情況下最終采用了哪個(gè)依賴的版本。標(biāo)紅的就是沖突版本,白色的是當(dāng)前的解析版本。這個(gè)選項(xiàng),需要從下向上看

解決思路
- 排除指定的版本:如果有兩個(gè)依賴的版本發(fā)生了沖突,那么只要用exclusion關(guān)鍵字把其中一個(gè)依賴給排除掉,只剩下一個(gè)依賴即可

-
子工程指定版本號(hào)
-
子工程先排除,再指定版本號(hào):如下圖,在starter-web中排除spring-webmvc,然后指定spring-webmvc的版本為6.0.9

-
鎖定版本:使用dependencyManagement統(tǒng)一對(duì)依賴的版本進(jìn)行定義
-
路徑優(yōu)先:當(dāng)依賴中出現(xiàn)相同的資源時(shí),層級(jí)越深,優(yōu)先級(jí)越低,層級(jí)越淺,優(yōu)先級(jí)越高。實(shí)際使用就是直接在pom中顯示使用且定義版本
-
聲明優(yōu)先:當(dāng)資源在相同層級(jí)被依賴時(shí),配置順序靠前的覆蓋配置順序靠后的
-
特殊優(yōu)先:當(dāng)同級(jí)配置了相同資源的不同版本,后配置的覆蓋先配置的
對(duì)應(yīng)MD文檔
鏈接:Maven 筆記
浙公網(wǎng)安備 33010602011771號(hào)