Maven的配置文件pom.xml詳解(含常用plugin)

上一次,我們講解了Maven的安裝與配置,那么這次我們就講講pom.xml,在Maven中,pom.xml是必不可少的配置文件,它定義了項(xiàng)目的各種屬性和依賴關(guān)系。接下來,我們將全面解析pom.xml,了解其結(jié)構(gòu)和屬性,以及如何使用它來管理項(xiàng)目
一、什么是pom.xml
pom.xml是Maven項(xiàng)目的核心配置文件,它是 項(xiàng)目對(duì)象模型 - Project Object Model(POM)的縮寫。POM定義了項(xiàng)目的所有屬性,包括項(xiàng)目的名稱、版本、依賴關(guān)系、構(gòu)建配置等。使用pom.xml,我們可以輕松地管理項(xiàng)目的構(gòu)建和依賴關(guān)系,讓我們能夠更專注于業(yè)務(wù)邏輯的開發(fā)。
二、pom.xml的結(jié)構(gòu)
我們先看一個(gè)簡(jiǎn)單pom.xml的結(jié)構(gòu),首先<project>和<modelVersion>標(biāo)簽主要針對(duì)的是本pom.xml文件的格式,如下:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>example-proj</artifactId>
<version>1.0.0</version>
<name>Example Project</name>
<description>This is an example Maven project.</description>
<url>http://www.example.com/</url>
<licenses> <!-- 許可證 -->
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers> <!-- 開發(fā)者信息 -->
<developer>
<id>developer1</id>
<name>Developer One</name>
<email>developer1@example.com</email>
<organization>Example Organizations Inc.</organization>
<organizationUrl>http://www.example-organizations.com/</organizationUrl>
<roles>
<role>developer</role>
</roles>
<timezone>-5</timezone>
</developer>
</developers>
<dependencies> <!-- 依賴項(xiàng) -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
</dependencies>
<build> <!-- 項(xiàng)目構(gòu)建 -->
<plugins> <!-- 插件配置 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.example.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>其中<modelVersion>指定了pom.xml文件使用的XML schema版本,目前,其最新的版本是4.0.0。其他部分我們會(huì)在下面進(jìn)行詳解
三、項(xiàng)目的基本信息
與項(xiàng)目的基本信息相關(guān)的標(biāo)簽有很多,以下算必填項(xiàng)
groupId:項(xiàng)目的組名,通常是反轉(zhuǎn)的域名,比如com.example。artifactId:項(xiàng)目的唯一標(biāo)識(shí)符,通常是項(xiàng)目的名稱。version:項(xiàng)目的版本號(hào)。packaging:項(xiàng)目的打包方式,通常是jar、war或pom,如果沒有指定packaging,默認(rèn)值是jar。
除了上面的幾個(gè)標(biāo)簽,還有一些項(xiàng)目相關(guān),但非必填的內(nèi)容:
name:項(xiàng)目名,可選項(xiàng),提供項(xiàng)目的簡(jiǎn)短名稱description:項(xiàng)目描述,可選項(xiàng),提供項(xiàng)目的詳細(xì)描述。version:項(xiàng)目主頁(yè),可選項(xiàng),提供項(xiàng)目的網(wǎng)址。licenses: 許可證聲明,可選項(xiàng),聲明項(xiàng)目所使用的一種或多種許可證developers:開發(fā)者信息,可選項(xiàng),列出項(xiàng)目的開發(fā)人員。url:項(xiàng)目主頁(yè),可選項(xiàng),提供項(xiàng)目的網(wǎng)址
當(dāng)然,還有一些在我們示例中沒有出現(xiàn)的標(biāo)簽,比如說 modules 和 parent
1.modules
modules 標(biāo)簽用于聲明當(dāng)前 Maven 項(xiàng)目包含的模塊子項(xiàng)目,每個(gè)子項(xiàng)目都是一個(gè)獨(dú)立的 Maven 項(xiàng)目,具有自己的 pom.xml 文件,可以進(jìn)行獨(dú)立構(gòu)建和測(cè)試。在父項(xiàng)目的 pom.xml 文件中,使用 標(biāo)簽來列出所有子項(xiàng)目的名稱,如下所示:
<project>
<groupId>com.example.parent</groupId>
<artifactId>parent-project</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>child1</module>
<module>child2</module>
<module>child3</module>
</modules>
</project>上述代碼表示當(dāng)前項(xiàng)目是一個(gè) Maven 的多模塊項(xiàng)目:它包含了三個(gè)子項(xiàng)目 child1、child2 和 child3,這三個(gè)子項(xiàng)目與 parent-project 有相同的 groupId 和 version,但是 artifactId 不同,它們的 pom.xml 都位于 parent-project 的根目錄下。當(dāng)使用 Maven 命令在 parent-project 下執(zhí)行構(gòu)建時(shí),Maven 會(huì)對(duì)每個(gè)子模塊執(zhí)行構(gòu)建,最終生成子項(xiàng)目的構(gòu)件并復(fù)制到 parent-project 的 target 目錄下
2.parent
parent 標(biāo)簽用于聲明當(dāng)前 Maven 項(xiàng)目的父項(xiàng)目,它可以將若干個(gè) Maven 項(xiàng)目組織成一個(gè)整體,指定版本號(hào),插件版本號(hào)等,便于管理和維護(hù),在一個(gè) Maven 項(xiàng)目中,使用標(biāo)簽來引用父項(xiàng)目,如下所示:
<project>
<groupId>com.example.child</groupId>
<artifactId>child-project</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<parent>
<groupId>com.example.parent</groupId>
<artifactId>parent-project</artifactId>
<version>1.0.0</version>
<relativePath>../parent-project/pom.xml</relativePath>
</parent>
</project>上述代碼表示當(dāng)前項(xiàng)目 child-project 是 parent-project 的子項(xiàng)目,它的 groupId 和 version 都繼承自 parent-project。元素是一個(gè)可選項(xiàng),它的值是父項(xiàng)目 pom.xml 文件到子項(xiàng)目 pom.xml 文件的相對(duì)路徑,如果子項(xiàng)目 pom.xml 和父項(xiàng)目 pom.xml 在同一目錄下,則可以省略此元素。
3.scm
scm 又叫 Software Configuration Management,即軟件配置管理, 與我們以前提到過的版本控制有關(guān),是Maven中用于指定源代碼版本控制信息的標(biāo)簽。它可以幫助Maven獲取源代碼并將構(gòu)建生成的二進(jìn)制文件提交到版本控制系統(tǒng)中。scm標(biāo)簽通常用于指定源代碼管理系統(tǒng)的類型、URL、開發(fā)者連接等詳細(xì)信息。示例如下:
<scm>
<connection>scm:git:git://github.com/username/repo.git</connection> <!-- 指定連接到SCM的URL,可以使用HTTP或者SSH協(xié)議 -->
<developerConnection>scm:git:ssh://github.com/username/repo.git</developerConnection> <!-- 指定開發(fā)者連接到SCM的URL,通常使用SSH協(xié)議 -->
<url>http://github.com/username/repo/tree/master</url> <!-- 指定SCM的web頁(yè)面URL,方便開發(fā)者查看SCM信息 -->
<tag>1.0.0</tag> <!-- 當(dāng)前Maven構(gòu)件的版本在SCM中對(duì)應(yīng)的標(biāo)記 -->
</scm>developerConnection 與 connection 有些許不同,connection 可以指向一個(gè)本地文件系統(tǒng)路徑,也可以是一個(gè)遠(yuǎn)程代碼倉(cāng)庫(kù)的URL;developerConnection 則是開發(fā)者使用的版本控制系統(tǒng)的連接URL,例如connection指向只讀代碼倉(cāng)庫(kù),而developerConnection則指向可寫代碼倉(cāng)庫(kù)。
通過在POM文件中添加scm標(biāo)簽,Maven可以獲取源代碼并構(gòu)建項(xiàng)目,同時(shí)還可以自動(dòng)將構(gòu)建生成的文件提交到版本控制系統(tǒng)中,方便管理代碼版本和協(xié)同開發(fā)
4.properties
properties 嚴(yán)格來說,并不一定是項(xiàng)目本身的信息,而是人為設(shè)置的屬性或者說宏,這個(gè)標(biāo)簽用來定義和管理項(xiàng)目中所需要的屬性,其作用有以下幾個(gè):
- 統(tǒng)一管理項(xiàng)目中的常用屬性,比如版本號(hào)、路徑、插件版本等,方便統(tǒng)一修改和管理。
- 可以在配置過程中使用 ${…}占位符引用這些屬性,使得配置更加靈活和便捷。
- 避免硬編碼,提高代碼的可維護(hù)性和可讀性
比如說我們可以這么配
<properties>
<project.name>demo-project</project.name>
<project.version>1.0.0</project.version>
<jdk.version>1.8</jdk.version>
</properties>
....省略其余部分
<dependency>
<groupId>com.example.demo</groupId>
<artifactId>${project.name}-api</artifactId>
<version>${project.version}</version>
</dependency>四、項(xiàng)目的依賴列表
1.dependency
與項(xiàng)目的依賴列表相關(guān)的標(biāo)簽最外層由 <dependencies>來囊括,內(nèi)部包含了各種具體的依賴<dependency>,該標(biāo)簽用于指定一個(gè)依賴項(xiàng),它包含以下幾個(gè)子標(biāo)簽
<groupId>:指定依賴項(xiàng)的groupId,項(xiàng)目的組名<artifactId>:指定依賴項(xiàng)的artifactId,項(xiàng)目的唯一標(biāo)識(shí)符<version>:指定依賴項(xiàng)的版本號(hào)。<scope>:指定依賴項(xiàng)在項(xiàng)目中的使用范圍。
其中的 <scope>一般包含以下幾種范圍:常用的有compile、test、provided 和 runtime
- compile:依賴庫(kù)默認(rèn)的 scope,表示該依賴庫(kù)在編譯、測(cè)試、運(yùn)行時(shí)均需要使用。
- provided:表示該依賴庫(kù)只在編譯和測(cè)試時(shí)需要使用,而在運(yùn)行時(shí)已經(jīng)被系統(tǒng)或者容器提供,所以不需要打包到最終的應(yīng)用程序中。
- runtime:表示該依賴庫(kù)只在運(yùn)行時(shí)需要使用,而在編譯和測(cè)試時(shí)則不需要。
- test:表示該依賴庫(kù)只在測(cè)試時(shí)需要使用,而在編譯和運(yùn)行時(shí)則不需要。
比如說我們引入了 junit 包,但顯然這個(gè)包我們不需要在打包時(shí)包含,只是用于測(cè)試,那么我們就可以將 junit 的 scope 設(shè)置為 test。
2.repository
當(dāng)然,我們還能在pom文件中支持指定Maven倉(cāng)庫(kù),即使用 <repositories> 和 <repository>標(biāo)簽,<repository>用于指定一個(gè)Maven倉(cāng)庫(kù),它包含以下幾個(gè)子標(biāo)簽:
<id>:指定Maven倉(cāng)庫(kù)的ID。<name>:指定Maven倉(cāng)庫(kù)的名稱。<url>:指定Maven倉(cāng)庫(kù)的URL
五、 項(xiàng)目的構(gòu)建配置
項(xiàng)目的構(gòu)建配置信息,包括編譯器版本、插件列表、源代碼目錄等,接下來我們慢慢來講
1.build
build用于定義項(xiàng)目的構(gòu)建配置,包括源代碼目錄、資源目錄、插件等,其中代碼部分的設(shè)置如下
<project>
.... 省略其他部分
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>需要注意的是,像資源目錄這種路徑是沒有默認(rèn)值的,但根據(jù)Maven的約定優(yōu)于配置原則(Convention over Configuration),Maven會(huì)使用默認(rèn)的目錄結(jié)構(gòu)去查找源代碼和測(cè)試代碼。默認(rèn)的目錄結(jié)構(gòu)如下
project
|--src
|--main
|--java // Java主源代碼目錄
|--resources // 資源文件目錄
|--test
|--java // 測(cè)試主代碼目錄
|--resources // 測(cè)試資源文件目錄因此,在一個(gè)標(biāo)準(zhǔn)的Maven項(xiàng)目中,sourceDirectory默認(rèn)值應(yīng)該是src/main/java。如果有自定義的代碼目錄結(jié)構(gòu),需要顯式地設(shè)置sourceDirectory元素的值。例如,如果有一個(gè)名為“core”的子目錄作為項(xiàng)目的主源代碼目錄,可以按以下方式進(jìn)行配置:
<build> <sourceDirectory>core</sourceDirectory> ... </build>
2.plugins
plugins的作用是定義 Maven 插件, plugins 主要用于擴(kuò)展 Maven 的功能,幫助開發(fā)人員更方便地構(gòu)建、打包、發(fā)布項(xiàng)目。插件可以通過 Maven 的插件中心或者自己構(gòu)建的私有倉(cāng)庫(kù)來使用,能在構(gòu)建過程中執(zhí)行特定的任務(wù),比如編譯、打包、測(cè)試等。
- 插件的配置可以分為兩種方式:
全局配置和項(xiàng)目配置。 - 全局配置是在 Maven 安裝目錄下的 conf/settings.xml 文件中進(jìn)行配置,可以被所有的項(xiàng)目使用。
- 項(xiàng)目配置則是在項(xiàng)目的 pom.xml 文件中進(jìn)行配置,只對(duì)當(dāng)前項(xiàng)目生效。
插件的使用主要分為以下幾個(gè)步驟:
在 pom.xml 中聲明插件依賴配置插件的參數(shù)運(yùn)行插件命令
而常用的Maven Plugin有不少,我們一一來說一下:
maven-compiler-plugin
比方說,最常用的編譯功能,我們可以在pom里面這么寫
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-Xlint:unchecked</arg>
<arg>-Xlint:deprecation</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>各子標(biāo)簽的作用如下:
<source>:指定Java源代碼的版本,例如1.8表示Java 8。<target>:指定編譯后的字節(jié)碼版本,例如1.8表示Java 8。<encoding>:指定源代碼的編碼格式。<showWarnings>:是否顯示編譯警告信息,true表示顯示,false表示不顯示。<compilerArgs>:可選參數(shù),可以添加多個(gè)編譯器參數(shù),例如-Xlint選項(xiàng)用來啟用編譯器警告檢查。
如果我們按示例中配置,我們就指定了編譯器的源和目標(biāo)版本為1.8,當(dāng)我們使用 mvn compile 命令的時(shí)候,這個(gè)插件將會(huì)編譯我們的 Java 代碼,并將編譯后的 class 文件放置在 target 目錄下
maven-surefire-plugin
maven-surefire-plugin插件是Maven中的一個(gè)測(cè)試框架,用于執(zhí)行Java單元測(cè)試和集成測(cè)試。它的主要作用是在構(gòu)建過程中運(yùn)行測(cè)試,并生成測(cè)試報(bào)告,在pom.xml中的配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M4</version>
<configuration>
<skipTests>true</skipTests>
<forkCount>2</forkCount>
<useSystemClassLoader>false</useSystemClassLoader>
<reuseForks>true</reuseForks>
<includes>
<include>**/*Test.java</include>
<include>**/*Tests.java</include>
</includes>
<systemProperties>
<property>
<name>testProp1</name>
<value>value1</value>
</property>
<property>
<name>testProp2</name>
<value>value2</value>
</property>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>其中幾個(gè)子標(biāo)簽的作用分別如下
<skipTests>:設(shè)置是否跳過測(cè)試,默認(rèn)值為false。<forkCount>:設(shè)置并行運(yùn)行測(cè)試的JVM進(jìn)程數(shù)。<useSystemClassLoader>:設(shè)置是否使用系統(tǒng)類加載器加載測(cè)試類。<reuseForks>:設(shè)置是否重用已經(jīng)啟動(dòng)的JVM進(jìn)程。<includes>:設(shè)置測(cè)試文件的過濾規(guī)則,支持通配符。<systemProperties>:設(shè)置傳遞給測(cè)試環(huán)境的系統(tǒng)屬性,可以在測(cè)試代碼中通過System.getProperty()方法獲取 maven-jar-plugin
maven-jar-plugin 用于將項(xiàng)目打包為JAR文件,在這個(gè)例子中,我們告訴Maven將com.example.MyApp作為JAR文件的主類,那么在pom.xml中的配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.example.MyApp</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build><archive>:JAR文件的歸檔配置信息<manifest>:MANIFEST.MF文件的配置信息<addClasspath>:是否將依賴項(xiàng)添加到Class-Path條目中<mainClass>:定義可執(zhí)行JAR文件的入口類
maven-install-plugin
當(dāng)執(zhí)行mvn instal命令時(shí),maven-install-plugin 用于將一個(gè)特定的文件安裝到本地Maven倉(cāng)庫(kù)中,以便其他項(xiàng)目可以使用它,例如在pom.xml中的配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<file>${project.build.directory}/example.jar</file>
<groupId>com.example</groupId>
<artifactId>example</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
</configuration>
</plugin><file>:用來指定要安裝到本地Maven倉(cāng)庫(kù)中的文件的路徑。該標(biāo)簽的值應(yīng)該是一個(gè)文件的絕對(duì)或相對(duì)路徑。<groupId>:通過該標(biāo)簽設(shè)置所安裝文件的groupId,通常表示項(xiàng)目的組織或組織部門的標(biāo)識(shí)符。<artifactId>:同樣是通過該標(biāo)簽設(shè)置所安裝文件的artifactId,通常是指該文件的名稱。<version>:通過該標(biāo)簽設(shè)置所安裝文件的版本號(hào),通常采用三級(jí)版本號(hào)的格式,例如"1.0.0"。<packaging>:通過該標(biāo)簽來指定所安裝文件的打包類型,通常是jar或war。
需要注意的是,<file>標(biāo)簽必須與<groupId>、<artifactId>和<version>標(biāo)簽一起使用,才能正確將該文件安裝到本地Maven倉(cāng)庫(kù)中,并在其他項(xiàng)目中使用,除了以上的配置,還有一些可選的配置項(xiàng):
<classifier>:通過該標(biāo)簽指定所安裝文件的分類器,例如"sources"或"javadoc"等,默認(rèn)為null。<localRepositoryPath>:通過該標(biāo)簽指定本地倉(cāng)庫(kù)的路徑,默認(rèn)為Maven默認(rèn)的本地倉(cāng)庫(kù)路徑。<createChecksum>:是否在安裝文件時(shí)創(chuàng)建SHA-1校驗(yàn)和,默認(rèn)為true。<skip>:是否跳過該插件的運(yùn)行,默認(rèn)為false,即不跳過。
maven-clean-plugin
maven-clean-plugin 用于清理Maven項(xiàng)目中的目標(biāo)文件和構(gòu)建臨時(shí)文件,以便重新構(gòu)建項(xiàng)目。它通常被用于在構(gòu)建之前清理項(xiàng)目,以確保在構(gòu)建時(shí)使用最新的代碼和資源ar文件,在pom.xml中的配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>clean-all</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>target</directory>
<includes>
<include>**/*</include>
</includes>
</fileset>
</filesets>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>該配置中,maven-clean-plugin的版本號(hào)是3.1.0,它在clean階段(phase標(biāo)簽指定)執(zhí)行,使用的目標(biāo)是clean。下面是各個(gè)子標(biāo)簽的作用:
<excludeDefaultDirectories>:默認(rèn)值為false,如果設(shè)置為true,則禁用清理操作中默認(rèn)清理的目錄(如target、bin等)。<filesets>:文件集合,可以指定多個(gè)文件或文件夾需要被清理。<fileset>:?jiǎn)蝹€(gè)的文件或文件夾。<directory>:需要清理的文件夾路徑。<includes>:需要包含的文件或文件夾,支持通配符。<excludes>:需要排除的文件或文件夾,支持通配符
至于通配符,使用規(guī)則如下:
* 匹配零個(gè)或多個(gè)字符
** 匹配零個(gè)或多個(gè)目錄
需要注意的是,Maven的通配符僅支持*和**,不支持其他通配符,例如?。同時(shí),通配符匹配的范圍是相對(duì)于構(gòu)建目錄的,也就是默認(rèn)情況下是相對(duì)于pom.xml文件的目錄
maven-release-plugin
maven-release-plugin 可以幫助我們?cè)诖a庫(kù)中創(chuàng)建一個(gè)穩(wěn)定的發(fā)布版本,并將其發(fā)布到Maven倉(cāng)庫(kù)中,同時(shí)更新開發(fā)版本號(hào),以便于下次開發(fā)版本的迭代,它可以做如下配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.2</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
<tagBase>http://svn.example.com/tags</tagBase>
<autoVersionSubmodules>true</autoVersionSubmodules>
<releaseProfiles>release</releaseProfiles>
<branchBase>http://svn.example.com/branches</branchBase>
</configuration>
</plugin>
</plugins>
</build><tagNameFormat>: 指定發(fā)布版本的標(biāo)簽格式,@{project.version}會(huì)被替換為項(xiàng)目的版本號(hào)。在上面的配置中,標(biāo)簽格式為v@{project.version}。<tagBase>: 用于指定打標(biāo)簽的位置,默認(rèn)值為 ${project.scm.url},即和項(xiàng)目的 SCM 地址相同。<autoVersionSubmodules>: 是否自動(dòng)更新子模塊的版本號(hào)。如果設(shè)置為true,則子模塊的版本號(hào)會(huì)自動(dòng)更新為父模塊的版本號(hào)。<releaseProfiles>: 指定觸發(fā)發(fā)布的Maven profile。只有在激活該profile后才會(huì)觸發(fā)發(fā)布操作。在上面的配置中,只有當(dāng)profile名稱為release時(shí),才會(huì)觸發(fā)發(fā)布操作,關(guān)于profile,我們下面會(huì)講<branchBase>:用于指定創(chuàng)建分支的位置,默認(rèn)值同 tagBase,即和項(xiàng)目的 SCM 地址相同。
3.profiles
profiles用于定義 Maven 運(yùn)行時(shí)的不同配置環(huán)境,比如開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境等,可以在不同的環(huán)境中使用不同的配置,比如我們做了如下配置
<profiles>
<profile>
<id>prod</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles><id>標(biāo)簽指定profile的唯一標(biāo)識(shí)符。<activation>標(biāo)簽指定何時(shí)使用該profile。在示例中,activeByDefault設(shè)置為true表示默認(rèn)啟用該profile。<build>標(biāo)簽包含一組構(gòu)建配置,這些配置將在激活profile時(shí)覆蓋默認(rèn)配置。在示例中,它定義了maven-compiler-plugin插件的版本和為Java 11設(shè)置編譯器版本。
在Maven中,使用以下命令激活特定的profile:
mvn clean install -Pprod
這將激活prod profile,覆蓋默認(rèn)構(gòu)建配置。
六、pom.xml的使用
經(jīng)過了上面的學(xué)習(xí),不難發(fā)現(xiàn),使用pom.xml可以輕松地管理項(xiàng)目的構(gòu)建和依賴關(guān)系,其主要用法其實(shí)有三種:
- 添加依賴:在dependencies標(biāo)簽下添加依賴,包括groupId、artifactId、version、scope等信息。
- 修改打包方式:在packaging標(biāo)簽下修改項(xiàng)目的打包方式,通常是jar、war或pom。
- 配置插件:在build標(biāo)簽下配置插件,包括groupId、artifactId、version等信息。插件可以幫助我們處理各種構(gòu)建任務(wù),比如編譯代碼、生成文檔、打包文件等。
到此這篇關(guān)于全面詳解Maven的配置文件pom.xml(含常用plugin)的文章就介紹到這了,更多相關(guān)Maven 配置文件pom.xml內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis Mapper映射文件配置的實(shí)現(xiàn)
本文主要介紹了MyBatis Mapper映射文件配置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-05-05
SpringBoot版本沖突導(dǎo)致NoSuchFieldError的解決方案
在Spring Boot多模塊項(xiàng)目中,若父模塊與子模塊引用不同版本的Spring Boot依賴(例如父模塊使用2.7.3,子模塊使用3.2.1),可能導(dǎo)致運(yùn)行時(shí)出現(xiàn)NoSuchFieldError,所以本文給大家介紹了SpringBoot版本沖突導(dǎo)致NoSuchFieldError的解決方案,需要的朋友可以參考下2025-05-05
springboot配置文件中使用${}注入值的兩種方式小結(jié)
這篇文章主要介紹了springboot配置文件中使用${}注入值的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring Boot集成SLF4j從基礎(chǔ)到高級(jí)實(shí)踐(最新推薦)
SLF4j (Simple Logging Facade for Java) 是一個(gè)日志門面(Facade),不是具體的日志實(shí)現(xiàn),這篇文章主要介紹了Spring Boot集成SLF4j從基礎(chǔ)到高級(jí)實(shí)踐(最新推薦),需要的朋友可以參考下2025-05-05
淺析Spring Boot單體應(yīng)用熔斷技術(shù)的使用
這篇文章主要介紹了淺析Spring Boot單體應(yīng)用熔斷技術(shù)的使用,幫助大家更好的理解和使用spirngboot框架,感興趣的朋友可以了解下2021-01-01
Spring Security OAuth 自定義授權(quán)方式實(shí)現(xiàn)手機(jī)驗(yàn)證碼
這篇文章主要介紹了Spring Security OAuth 自定義授權(quán)方式實(shí)現(xiàn)手機(jī)驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Springboot如何讀取resources下的json配置文件
這篇文章主要介紹了Springboot如何讀取resources下的json配置文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringCloud Alibaba Seata (收藏版)
Seata是一款開源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)在提供高性能和簡(jiǎn)單一樣的分布式事務(wù)服務(wù)。這篇文章主要介紹了SpringCloud Alibaba Seata 的相關(guān)知識(shí),需要的朋友可以參考下2020-10-10

