當(dāng)前項(xiàng)目的信息
<groupId>:企業(yè)網(wǎng)址反寫+項(xiàng)目名
? <artifactId>:項(xiàng)目名-模塊名
? <version>:版本號(hào)+類型(snapshot快照版本(簡化版本)奠货、alpha內(nèi)測版谜慌、beta公測版蕊退、release穩(wěn)定版、GA正式發(fā)布版)
? <packaging>:打包類型,默認(rèn)是jar夫晌,可以配置成war泣棋、zip胶哲、pom類型。
<name>:當(dāng)前項(xiàng)目名
<url>:項(xiàng)目地址
<description>:項(xiàng)目描述信息
<developers>:開發(fā)者信息
<licenses>:項(xiàng)目許可證信息潭辈,用來發(fā)布時(shí)授予別人使用此項(xiàng)目的權(quán)利
<organization>:組織信息鸯屿,企業(yè)信息
<properties>:屬性值標(biāo)簽,也叫變量標(biāo)簽把敢。
依賴標(biāo)簽
//實(shí)際引用jar包
<dependencies>
? ? <!--一個(gè)依賴包-->
? ? <dependency>
? ? ? <!--通過坐標(biāo)指定依賴包-->
? ? ? ? <groupId>? ? ? ? </groupId>
? ? ? ? <artifactId>? ? ? </artifactId>
? ? ? ? <version>? ? ? ? </version>
? ? ? ? <!--可選項(xiàng):依賴范圍寄摆。有六個(gè)可選值:常用compile/provided/test/runtime等-->
? ? ? ? <scope>一個(gè)范圍</scope>
? ? ? ? <!--可選項(xiàng):排除依賴傳遞:即:當(dāng)前項(xiàng)目依賴當(dāng)前配置的依賴包A時(shí),如果這個(gè)依賴包又依賴其他包B修赞,這里可以選擇排除依賴的傳遞性婶恼,不下載導(dǎo)入B-->
? ? ? ? <exclusions>
? ? ? ? ? ? <exclusion>
? ? ? ? ? ? ? <!--被排除的依賴包坐標(biāo)-->
? ? ? ? ? ? ? <groupId> </groupId>
? ? ? ? ? ? ? <artifactId> </artifactId>
? ? ? ? ? ? ? <version> </version>
? ? ? ? ? ? </exclusion>
? ? ? ? </exclusions>
? ? </dependency>
</dependencies>
依賴管理標(biāo)簽:
//版本管理,不引入jar 包
<dependencyManagement>
? ? ? <dependencies>?
? ? ? ? ? ? <dependency>?
? ? ? ? ? ? ? ? <groupId>org.springframework</groupId>?
? ? ? ? ? ? ? ? <artifactId>spring-core</artifactId>?
? ? ? ? ? ? ? ? <version>3.2.7</version>?
? ? ? ? ? ? </dependency>?
? ? </dependencies>?
?</dependencyManagement>
build:項(xiàng)目支持標(biāo)簽,一般用來引入插件
<build>
? ? <plugins>
? ? ? <plugin>
? ? ? ? <!--插件坐標(biāo)-->
? ? ? ? <groupId>? ? ? ? </groupId>
? ? ? ? <artifactId>? ? ? ? </artifactId>
? ? ? ? <version>? ? ? ? </version>
? ? ? ? 其他設(shè)置...
? ? ? </plugin>
? ? </plugins>
</build>
構(gòu)建插件
<build>
? ? ? <!--
? ? ? ? ? Maven定制化打包后的包名
? ? ? ? ? Maven默認(rèn)的包名為:<finalName>${project.artifactId}-${project.version}</finalName>
? ? ? ? ? 定制化想要的包名,如加上時(shí)間戳:<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
? ? ? -->
? ? ? <finalName>myProject</finalName>?
? ? ? <!-- 插件列表 -->
? ? ? <plugins>
? ? ? ? ? <plugin>
? ? ? ? ? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ? ? ? ? ? <artifactId>maven-source-plugin</artifactId>
? ? ? ? ? ? ? <version>2.4</version>
? ? ? ? ? ? ? <executions>
? ? ? ? ? ? ? ? ? <execution>
? ? ? ? ? ? ? ? ? ? ? <phase>package</phase>
? ? ? ? ? ? ? ? ? ? ? <goals>
? ? ? ? ? ? ? ? ? ? ? ? ? <goal>jar-no-fork</goal>
? ? ? ? ? ? ? ? ? ? ? </goals>
? ? ? ? ? ? ? ? ? </execution>
? ? ? ? ? ? ? </executions>
? ? ? ? ? </plugin>
? ? ? </plugins>
? ? ? <!-- 插件管理列表勾邦,與dependencyManagement標(biāo)簽作用相似蚣录,管理插件版本號(hào),讓子項(xiàng)目繼承使用 -->
? ? ? <pluginManagement>
? ? ? ? ? <plugins>
? ? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? ? <artifactId>maven-compiler-plugin</artifactId>
? ? ? ? ? ? ? ? ? <!-- 插件擴(kuò)展配置 -->
? ? ? ? ? ? ? ? ? <!-- 更詳細(xì)的例子:http://my.oschina.net/zh119893/blog/276090 -->
? ? ? ? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? ? ? ? <!-- 源代碼編譯版本 -->
? ? ? ? ? ? ? ? ? ? ? <source>1.7</source>
? ? ? ? ? ? ? ? ? ? ? <!-- 目標(biāo)平臺(tái)編譯版本 -->
? ? ? ? ? ? ? ? ? ? ? <target>1.7</target>
? ? ? ? ? ? ? ? ? ? ? <!-- 設(shè)置編譯字符集編碼 -->
? ? ? ? ? ? ? ? ? ? ? <encoding>${project.build.sourceEncoding}</encoding>
? ? ? ? ? ? ? ? ? </configuration>
? ? ? ? ? ? ? </plugin>
? ? ? ? ? </plugins>
? ? ? </pluginManagement>
? ? </build>
? </project>
parent:繼承標(biāo)簽检痰,用于繼承父項(xiàng)目包归。
<parent>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-parent</artifactId>
? ? <version>1.5.6.RELEASE</version>
? ? <relativePath/>
</parent>
moudules:聚合標(biāo)簽
用于聚合多個(gè)maven項(xiàng)目,這樣用某指令執(zhí)行這個(gè)pom就會(huì)把聚合的各項(xiàng)目全部執(zhí)行铅歼,同時(shí)處理多個(gè)項(xiàng)目公壤。
<modules>
? ? ? ? <module>a-demo</module>
? ? ? ? <module>b-client</module>
? ? ? ? <module>c-interface</module>
? ? </modules>
依賴沖突與解決
依賴沖突:一個(gè)項(xiàng)目A,通過不同依賴傳遞路徑依賴于X椎椰,若在不同路徑下傳遞過來的X版本不同厦幅,那么A應(yīng)該導(dǎo)入哪個(gè)版本的X包呢?
? ? 沖突解決方案:
? ? 1:如果依賴路徑的長度不同慨飘,則“短路優(yōu)先”:
? ? ? ? A—>B—>C—>D—>E—>X(version 0.0.1)
? ? ? ? A—>F—>X(version 0.0.2)
? ? ? ? 則A依賴于X(version 0.0.2)确憨。
? ? 2:依賴路徑長度相同情況下,則“先聲明優(yōu)先”:
? ? ? ? A—>E—>X(version 0.0.1)
? ? ? ? A—>F—>X(version 0.0.2)
? ? ? ? 則在項(xiàng)目A的<depencies></depencies>中瓤的,E休弃、F那個(gè)在先則A依賴哪條路徑的X。
maven的繼承與聚合(相關(guān)標(biāo)簽上面已列),更多用于模塊化開發(fā)
繼承:
1:創(chuàng)建父maven項(xiàng)目圈膏,在pom.xml中定義被共用的依賴:通過標(biāo)簽塔猾。
2:在需要使用到共用依賴包的項(xiàng)目中繼承父項(xiàng)目:通過標(biāo)簽
聚合:
創(chuàng)建項(xiàng)目E,在E的pom.xml中稽坤,首先修改E的為pom丈甸,表示項(xiàng)目E只是一個(gè)maven腳本文件,用于執(zhí)行尿褪。然后通過標(biāo)簽進(jìn)行聚合:
依賴范圍
compile:默認(rèn)范圍睦擂,編譯、測試杖玲、運(yùn)行都有效
provided:編譯和測試有效顿仇,最后運(yùn)行不會(huì)被加入,如tomcat依賴
runtime:在測試和運(yùn)行的時(shí)候有效天揖,編譯不會(huì)被加入夺欲,比如jdbc驅(qū)動(dòng)jar
test:測試階段有效,比如junit
system:與provided一致今膊,編譯和測試階段有效些阅,但與系統(tǒng)關(guān)聯(lián),可移植性差
import:導(dǎo)入的范圍斑唬,它只是用在dependencyManagement中市埋,表示從其它的pom中導(dǎo)入dependency的配置
依賴排除
通過<exclusions>標(biāo)簽實(shí)現(xiàn)黎泣。
? ? A項(xiàng)目引用B項(xiàng)目依賴時(shí),主動(dòng)排除傳遞的C項(xiàng)目依賴缤谎,修改A項(xiàng)目pom.xml
? ? <dependency>
? ? ? ? ? <groupId>com.jsun.test</groupId>
? ? ? ? ? <artifactId>B</artifactId>
? ? ? ? ? <version>0.0.1-SNAPSHOT</version>
? ? ? ? ? <exclusions>
? ? ? ? ? ? <exclusion>
? ? ? ? ? ? ? <groupId>com.jsun.test</groupId>
? ? ? ? ? ? ? <artifactId>C</artifactId>
? ? ? ? ? ? </exclusion>
? ? ? ? ? </exclusions>
? ? ? ? </dependency>
通過true實(shí)現(xiàn)
改B項(xiàng)目的pom.xml:
<dependency>
? ? ? <groupId>com.mavan.demo</groupId>
? ? ? <artifactId>C</artifactId>
? ? ? <version>0.0.1-SNAPSHOT</version>
? ? ? <optional>true</optional>
? ? </dependency>