概述
Maven是為Java項目提供構建和依賴管理支持的工具
構建環節
-
清理clean
刪除上一次構建的結果
-
編譯compile
Java源程序編譯成*.class字節碼文件
-
測試test
運行提前準備好的測試程序,執行src/text/java下的junit測試用例
-
報告site
每次測試后用標準格式記錄和顯示測試結果
-
打包package
Java工程:jar包
web工程:war包
-
安裝install
把一個Maven工程經過打包操作生成jar包或war包存入Maven倉庫
-
部署deploy
部署jar包:把一個jar包部署到服務器上
部署war包:借助maven插件,將war包部署到tomcat服務器上
pom.xml
項目對象模型:將工程抽象為一個模型
<groupId>
公司或組織的id,即公司或組織域名的倒序,通常也會加上項目名稱
<artifactId>
一個項目或者是項目中的一個模塊的 id,即模塊的名稱,將來作為 Maven 工程的工程名
<version>
版本號
<scope>
依賴范圍
-
compile:編譯范圍(默認依賴范圍),編譯范圍的依賴會被打包
-
provided:當jdk或者一個容器提供該依賴后才使用。provided依賴在編譯和測試時需要,運行時不需要(已經被容器提供了)
-
runtime:運行和測試時需要,編譯時不需要,runtime范圍的依賴會被打包
-
test:編譯和運行時不需要,測試編譯和測試運行時需要,不會被打包
-
system:一般不推薦使用,從系統路徑引入項目
-
import:使用該依賴范圍的dependency只能放在dependencyManagement中,且需要配合
<type>pom</type>
使用<type>pom</type>
指定該工程的打包方式為pom,即只作為管理管理子工程依賴的項目,不打包使用該import之后就能使子工程都能使用該dependency管理的依賴版本
示例代碼:
<dependencyManagement><dependencies><!-- SpringCloud的jar包依賴 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency><!-- SpringBoot的jar包依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.9.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies> </dependencyManagement>
spring-cloud-dependencies
和spring-boot-dependencies
只是作為管理SpringCloud和SpringBoot依賴版本的父工程,在這里使用了import后,該工程的子工程都能免寫SpringCloud和SpringBoot的依賴了
<exclude>
依賴排除,一般是為了避免jar包之間的沖突
代碼示例:
<dependency><groupId>net.javatv.maven</groupId><artifactId>auth</artifactId><version>1.0.0</version><scope>compile</scope><!-- 使用excludes標簽配置依賴的排除 --><exclusions><!-- 在exclude標簽中配置一個具體的排除 --><exclusion><!-- 指定要排除的依賴的坐標(不需要寫version) --><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions>
</dependency>
<module>
用于父工程指定子工程共有哪些,因為子工程一般是以模塊的形式
示例:
<modules><module>demo-module</module>
</modules>
<parent>
用于子工程指定父工程為什么
示例:
<parent><artifactId>maven-demo-parent</artifactId><groupId>net.javatv.maven</groupId><version>1.0-SNAPSHOT</version>
</parent>
<dependencyManagement>
對依賴管理,實際上被管理的依賴沒有真正被引入到工程
作用:幫助子工程對依賴的統一管理,子工程針對這些依賴可以省略版本號
子工程中引入該依賴時,被管理的依賴才被引入到工程
子工程也可以使用別的版本號來進行修改(一般是做升級)
<properties>
自定義屬性,一般用自定義標簽來維護版本數據
示例:
<properties><!-- 自定義標簽,維護Spring版本數據 --><spring.version>5.3.19</spring.version>
</properties>
在需要的地方使用${}
來引用自定義的屬性名,實現一處修改 處處生效
示例:
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency></dependencies>
<build>
子標簽大致包含:定義約定的目錄結構、備用插件管理、生命周期插件
約定的目錄結構:
目錄名 | 作用 |
---|---|
sourceDirectory | 主題源程序存放目錄 |
scriptSourceDirectory | 腳本源程序存放目錄 |
testSourceDirectory | 測試源程序存放目錄 |
outputDirectory | 主體源程序編譯結果輸出目錄 |
testOutputDirectory | 測試源程序編譯結果輸出目錄 |
resources | 主體資源文件存放目錄 |
testResources | 測試資源文件存放目錄 |
directory | 構建結果輸出目錄 |
生命周期插件:
<plugin>
示例:
<plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><executions><execution><id>default-compile</id><phase>compile</phase><goals><goal>compile</goal></goals></execution><execution><id>default-testCompile</id><phase>test-compile</phase><goals><goal>testCompile</goal></goals></execution></executions>
</plugin>
-
artifactId 和 version 標簽定義了插件的坐標,作為 Maven 的自帶插件這里省略了 groupId
-
executions 標簽內可以配置多個 execution 標簽
-
id:指定唯一標識
-
phase:關聯的生命周期階段
-
goals/goal:關聯指定生命周期的目標
goals 標簽中可以配置多個 goal 標簽,表示一個生命周期環節可以對應當前插件的多個目標。
-
常用插件:
<build><plugins><!-- plugin 標簽:這是我要指定的一個具體的插件 --><plugin><!-- 插件的坐標。此處引用的 maven-compiler-plugin 插件不是第三方的,是一個 Maven 自帶的插件。 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><!-- configuration 標簽:配置 maven-compiler-plugin 插件 --><configuration><!-- 具體配置信息會因為插件不同、需求不同而有所差異 --><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><!--SpringBoot提供的用來改變Maven默認的打包行為--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.5</version></plugin></plugins>
</build>
<profile>
管理不同環境下的配置信息
沒有在<profile>
標簽中的為默認的profile
激活profile
POM 中沒有在 profile 標簽里的就是默認的 profile,當然默認被激活
基于環境信息激活:
環境信息包含:JDK 版本、操作系統參數、文件、屬性等各個方面。一個 profile 一旦被激活,那么它定義的所有配置都會覆蓋原來 POM 中對應層次的元素。可參考下面的標簽結構:
<profile><id>dev</id><activation><!-- 配置是否默認激活 --><activeByDefault>false</activeByDefault><jdk>1.5</jdk><os><name>Windows XP</name><family>Windows</family><arch>x86</arch><version>5.1.2600</version></os><property><name>mavenVersion</name><value>2.0.5</value></property><file><exists>file2.properties</exists><missing>file1.properties</missing></file></activation>
</profile>
Maven 3.2.2 開始:各條件均需滿足該配置才會被激活。
多環境管理
<build><!-- profile對資源的操作 --><resources><resource><directory>src/main/resources</directory><!-- 先排除所有環境相關的配置文件 --><excludes><exclude>application*.yml</exclude></excludes></resource><resource><directory>src/main/resources</directory><!-- 是否替換@xx@表示的maven properties/yml屬性值 --><!--通過開啟 filtering,maven 會將properties/yml文件中的@xx@替換 profile 中定義的xx變量/屬性--><filtering>true</filtering><includes><include>application.yml</include><include>application-${profileActive}.yml</include></includes></resource></resources>
</build><!--多環境文件配置-->
<profiles><!--開發環境--><profile><id>dev</id><activation><!--默認激活--><activeByDefault>true</activeByDefault></activation><properties><profileActive>dev</profileActive></properties></profile><!--測試環境--><profile><id>test</id><properties><profileActive>test</profileActive></properties></profile><!--正式環境--><profile><id>prod</id><properties><profileActive>prod</profileActive></properties></profile>
</profiles>
在打包的時候可以選擇打包其中一個環境的包(可以理解為選定某個profile為active)
SpringBoot 天然支持多環境配置,一般來說,application.yml
存放公共的配置,application-dev.yml
、application-test.yml
、application.prod.yml
分別存放三個環境的配置。
配置文件示例:
# 在這里當選定環境后就會將@profileActive@替換,例如dev
spring:profiles:active: '@profileActive@'