pom.xml常用的標簽
通常在父pom的標簽
<dependencyManagement>
dependencyManagement 和 dependencies區(qū)別:
1)Dependencies相對于dependencyManagement,所有生命在dependencies里的依賴都會自動引入,并默認被所有的子項目繼承。
2)dependencyManagement里只是聲明依賴,并不自動實現(xiàn)引入,因此子項目需要顯示的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。
modules 聚合(或多模塊)
為了能一次構建兩個(或多個)模塊,就需要再創(chuàng)建一個pom.xml來對多個模塊進行集中的操作,也就是聚合。
案例
spring boot maven pom依賴
spring-boot-starter-web (pom packaging)-> spring-boot-parent (pom packaging)? ->spring-boot-dependencies (pom packaging)
一個百人團隊的maven 依賴的架構
module (jar packaging)-> (pom packaging) project? -> common-dependencies (pom packaging) 公司級別公共的jar包管理
子pom的常用標簽
<parent> 對父pom的依賴。
<distributionManagement> 指定Maven分發(fā)構件(deploy)的位置
案例
<distributionManagement>? ?
? ? <repository>? ?
? ? ? <id>nexus-releases</id>? ?
? ? ? <name>Nexus Release Repository</name>? ?
? ? ? <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>? ?
? ? </repository>? ?
? ? <snapshotRepository>? ?
? ? ? <id>nexus-snapshots</id>? ?
? ? ? <name>Nexus Snapshot Repository</name>? ?
? ? ? <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>? ?
? ? </snapshotRepository>? ?
? </distributionManagement>? ?
<build> 用于編譯配置。
案例
<build>
<!-- 項目的名字 -->
<finalName>WebMavenDemo</finalName>
<!-- 描述項目中資源的位置 -->
<resources>
<!-- 自定義資源1 -->
<resource>
<!-- 資源目錄 -->
<directory>src/main/java</directory>
<!-- 包括哪些文件參與打包 -->
<includes>
<include>**/*.xml</include>
</includes>
<!-- 排除哪些文件不參與打包 -->
<excludes>
<exclude>**/*.txt</exclude>
<exclude>**/*.doc</exclude>
</excludes>
</resource>
</resources>
<!-- 設置構建時候的插件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- 源代碼編譯版本 -->
<source>1.8</source>
<!-- 目標平臺編譯版本 -->
<target>1.8</target>
</configuration>
</plugin>
<!-- 資源插件(資源的插件) -->?
<plugin>?
<groupId>org.apache.maven.plugins</groupId>?
<artifactId>maven-resources-plugin</artifactId>?
<version>2.1</version>?
<executions>?
<execution>?
<phase>compile</phase>?
</execution>?
</executions>?
<configuration>?
<encoding>UTF-8</encoding>?
</configuration>
</plugin>
<!-- war插件(將項目打成war包) -->?
<plugin>?
<groupId>org.apache.maven.plugins</groupId>?
<artifactId>maven-war-plugin</artifactId>?
<version>2.1</version>?
<configuration>
<!-- war包名字 -->?
<warName>WebMavenDemo1</warName>
</configuration>?
</plugin>?
</plugins>
</build>
<profile>
簡單說一下,maven的profile可以讓我們定義一系列的配置信息,然后指定其激活條件。這樣我們就可以定義多個profile,然后每個profile對應不同的激活條件和配置信息,從而達到不同環(huán)境使用不同配置信息的目的。
maven依賴沖突
所謂的依賴沖突,舉例說明,工程A依賴B和C,但是B和C分別依賴不同版本的D。那么對于工程A來說,到底是依賴了哪個版本的D呢?
解決依賴沖突有2個基本的原則:
短路優(yōu)先原則。 比如存在如下的兩個依賴路徑,那么A最終會依賴version2的X版本。
A->B->C->X(version1)
A->D->X(version2)
如果路徑長度相同,那么先聲明先解析。
dependencyManagement 和 dependencies區(qū)別:
https://blog.csdn.net/yuyecsdn/article/details/90229024
maven中的distributionManagement的作用
https://blog.csdn.net/qq_31924435/article/details/53745811
maven pom項目結構