概述
pom 是 project model object
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
</project>
project 標(biāo)簽里可以寫的標(biāo)簽
項(xiàng)目描述
<!-- 項(xiàng)目組 -->
<groupId>com.baidu.lego</groupId>
<!-- 項(xiàng)目名 -->
<artifactId>admin-service</artifactId>
<!-- 項(xiàng)目版本 -->
<version>1.2.2</version>
<!-- 項(xiàng)目類型,可選 jar,war,pom汹碱。默認(rèn)是 jar -->
<packaging>jar</packaging>
版本管理
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1:子模塊會(huì)自動(dòng)引入父模塊的dependencies依賴粘衬,而不會(huì)自動(dòng)引入dependencyManagement的依賴
2:dependencyManagement里只是聲明依賴,并不實(shí)現(xiàn)引入咳促,因此子項(xiàng)目需要顯式的聲明需要用的依賴稚新,而且不需要指定version、scope跪腹,系統(tǒng)會(huì)自動(dòng)用父模塊的version褂删、scope
項(xiàng)目所需依賴
<dependencies>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
生命周期
scope
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
scope | 編譯階段 | 測(cè)試階段 | 運(yùn)行階段 | 發(fā)布階段 | 備注 |
---|---|---|---|---|---|
compile | yes | yes | yes | yes | 默認(rèn)scope |
provided | yes | yes | yes | - | |
system | yes | yes | yes | - | @Deprecated;類似provided冲茸; 需指定systemPath屬性屯阀,從本地倉庫下載依賴; |
runtime | - | yes | yes | yes | |
test | - | test | - | - | 舉例:junit |
import | ~ | ~ | ~ | ~ | 只用于 dependencyManagement 中type=pom的dependency 舉例:spring-cloud-dependencies |
作用域
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 防止將devtools依賴傳遞到其他模塊中 -->
</dependency>
Project A 是 Project B 的 parent
Project A 使用<optional>true</optional>
轴术,Project B 里不會(huì)傳進(jìn)這個(gè) dependency
自定義變量
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>12</maven.compiler.source>
</properties>
然后可以在別的地方這么使用:${maven.compiler.source}
Maven 生命周期指令
- clean难衰,清理,在進(jìn)行真正的構(gòu)建之前進(jìn)行一些清理工作逗栽,移除所有上一次構(gòu)建生成的文件盖袭。執(zhí)行該命令會(huì)刪除項(xiàng)目路徑下的target文件,但是不會(huì)刪除本地的maven倉庫已經(jīng)生成的jar文件彼宠。
- validate鳄虱,驗(yàn)證,驗(yàn)證工程是否正確凭峡,所需的信息是否完整拙已。
- compile,編譯源碼摧冀,編譯生成class文件,編譯命令悠栓,只編譯選定的目標(biāo),不管之前是否已經(jīng)編譯過按价,會(huì)在你的項(xiàng)目路徑下生成一個(gè)target目錄,在該目錄中包含一個(gè)classes文件夾笙瑟,里面全是生成的class文件及字節(jié)碼文件楼镐。
- test,單元測(cè)試往枷,測(cè)試框产。
- package凄杯,打包,將工程文件打包為指定的格式秉宿,例如JAR戒突,WAR等。這個(gè)命令會(huì)在你的項(xiàng)目路徑下一個(gè)target目錄描睦,并且擁有compile命令的功能進(jìn)行編譯膊存,同時(shí)會(huì)在target目錄下生成項(xiàng)目的jar/war文件。如果a項(xiàng)目依賴于b項(xiàng)目忱叭,打包b項(xiàng)目時(shí)隔崎,只會(huì)打包到b項(xiàng)目下target下,編譯a項(xiàng)目時(shí)就會(huì)報(bào)錯(cuò)韵丑,因?yàn)檎也坏剿蕾嚨腷項(xiàng)目爵卒,說明a項(xiàng)目在本地倉庫是沒有找到它所依賴的b項(xiàng)目,這時(shí)就用到install命令了
- verify撵彻,核實(shí)钓株,檢查package是否有效、符合標(biāo)準(zhǔn)陌僵。
- install轴合,安裝至本地倉庫,將包安裝至本地倉庫拾弃,以讓其它項(xiàng)目依賴值桩。該命令包含了package命令功能,不但會(huì)在項(xiàng)目路徑下生成class文件和jar包豪椿,同時(shí)會(huì)在你的本地maven倉庫生成jar文件奔坟,供其他項(xiàng)目使用(如果沒有設(shè)置過maven本地倉庫,一般在用戶/.m2目錄下搭盾。如果a項(xiàng)目依賴于b項(xiàng)目咳秉,那么install b項(xiàng)目時(shí),會(huì)在本地倉庫同時(shí)生成pom文件和jar文件鸯隅,解決了上面打包package出錯(cuò)的問題)
- site澜建,站點(diǎn),生成項(xiàng)目的站點(diǎn)文檔
- deploy蝌以,復(fù)制到遠(yuǎn)程倉庫