史上最全maven中的pom詳述
maven中的pom詳述
什么是POM?
POM(Project Object Model)是maven的基本工作單元。它是一個(gè) XML 文件,其中包含有關(guān)項(xiàng)目的信息以及 Maven 用于構(gòu)建項(xiàng)目的配置詳細(xì)信息。簡(jiǎn)單來(lái)說(shuō):POM(pom.xml)就是整個(gè)工程的項(xiàng)目規(guī)劃書(shū),它定義了項(xiàng)目的所有細(xì)節(jié):需要什么材料(依賴)、由誰(shuí)建造(開(kāi)發(fā)者信息)、如何建造(構(gòu)建配置)、以及項(xiàng)目的版本等。
超級(jí)POM
超級(jí) POM 是 Maven 的默認(rèn) POM。除非顯式設(shè)置,否則所有 POM 都會(huì)擴(kuò)展超級(jí) POM,這意味著超級(jí) POM 中指定的配置將為項(xiàng)目創(chuàng)建的 POM 繼承。超級(jí)POM可以理解為MAVEN世界的憲法,所有maven項(xiàng)目都必須遵守。超級(jí)POM中定義了一些默認(rèn)配置,下面列舉幾個(gè):
默認(rèn)目錄結(jié)構(gòu)
<!-- 源代碼目錄 -->
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<!-- 測(cè)試代碼目錄 -->
<testSourceDirectory>src/test/java</testSourceDirectory>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
<!-- 輸出目錄 -->
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>這就是為什么所有 Maven 項(xiàng)目都長(zhǎng)得一樣的原因。
默認(rèn)倉(cāng)庫(kù)配置
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>所有依賴默認(rèn)都從 Maven 中央倉(cāng)庫(kù)下載。
默認(rèn)插件配置及默認(rèn)插件版本管理
| 構(gòu)建階段 | 默認(rèn)插件 | 作用 |
|---|---|---|
compile | maven-compiler-plugin | 編譯源代碼 |
test | maven-surefire-plugin | 運(yùn)行單元測(cè)試 |
package | maven-jar-plugin | 打包成 JAR 文件 |
install | maven-install-plugin | 安裝到本地倉(cāng)庫(kù) |
對(duì)不同構(gòu)建階段綁定了不同的插件。
默認(rèn)打包配置
<!-- 默認(rèn)打包方式就是 JAR --> <packaging>jar</packaging>
最小的 POM
POM 用三坐標(biāo)(groupId、artifactId、version)的方式唯一標(biāo)識(shí)一個(gè)項(xiàng)目。可以理解成項(xiàng)目的身份證。如:
<project> <!-- 說(shuō):這是個(gè)項(xiàng)目 --> <modelVersion>4.0.0</modelVersion> <!-- 說(shuō):用第4版規(guī)則 --> <groupId>com.mycompany.app</groupId> <!-- 姓:公司/組織名 --> <artifactId>my-app</artifactId> <!-- 名:項(xiàng)目具體叫啥 --> <version>1</version> <!-- 排行:這是第幾個(gè)版本 --> </project>
POM核心元素
一個(gè)標(biāo)準(zhǔn)的 POM 文件包含以下核心元素:
坐標(biāo)(Coordinates) - 項(xiàng)目的唯一標(biāo)識(shí)
- groupId: 定義項(xiàng)目所屬的實(shí)際組織或公司,通常使用反向域名。例如:com.google.guava。
- artifactId: 定義實(shí)際項(xiàng)目(模塊)的名稱。例如:guava。
- version: 定義項(xiàng)目的當(dāng)前版本。例如:31.1-jre。SNAPSHOT:表示不穩(wěn)定、尚在開(kāi)發(fā)中的版本。RELEASE:表示穩(wěn)定的發(fā)布版本。
- packaging: 定義項(xiàng)目的打包方式。默認(rèn)為 jar。其他常見(jiàn)值:war, ear, pom(用于聚合或父POM)。
這三個(gè)元素(groupId, artifactId, version)合稱為GAV,是 Maven 世界的唯一身份證。
依賴管理(Dependencies)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
<optional>false</optional>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>- scope: 依賴范圍 : compile: 默認(rèn)值。對(duì)編譯、測(cè)試、運(yùn)行都有效。
- provided: 表示 JDK 或容器在運(yùn)行時(shí)已提供(如 servlet-api)。只在編譯和測(cè)試時(shí)使用。
- runtime: 編譯時(shí)不需要,但測(cè)試和運(yùn)行時(shí)需要(如 JDBC 驅(qū)動(dòng))。
- test: 只在測(cè)試時(shí)使用(如 JUnit)。
- system: 與 provided 類(lèi)似,但必須通過(guò) systemPath 顯式指定路徑(不推薦)。
- import: 僅用于 dependencyManagement 部分,用于從其他 POM 導(dǎo)入依賴管理。
- optional: 標(biāo)記依賴是否為可選。如果為 true,其他項(xiàng)目依賴本項(xiàng)目時(shí),該依賴不會(huì)被傳遞?!驹O(shè)你開(kāi)發(fā)了一個(gè)核心軟件,這個(gè)軟件支持多種數(shù)據(jù)庫(kù)(MySQL、PostgreSQL等),但是你不希望強(qiáng)制使用你軟件的人必須包含所有數(shù)據(jù)庫(kù)驅(qū)動(dòng)。你可以把數(shù)據(jù)庫(kù)驅(qū)動(dòng)設(shè)置為可選。這樣,當(dāng)別人在他的項(xiàng)目中引入你的軟件時(shí),他不會(huì)自動(dòng)獲得所有這些數(shù)據(jù)庫(kù)驅(qū)動(dòng),他需要明確指定他需要哪個(gè)驅(qū)動(dòng)(在自己的pom里面單獨(dú)引入)】,具體而言:
<project>
<groupId>com.example</groupId>
<artifactId>project-A</artifactId>
<version>1.0.0</version>
...
<dependencies>
<!-- 可選依賴:MySQL驅(qū)動(dòng) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
<optional>true</optional>
</dependency>
<!-- 可選依賴:PostgreSQL驅(qū)動(dòng) -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.6</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>現(xiàn)在,有另一個(gè)項(xiàng)目project-B依賴了project-A:
<project>
<groupId>com.example</groupId>
<artifactId>project-B</artifactId>
<version>1.0.0</version>
...
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>project-A</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>那么,project-B不會(huì)自動(dòng)傳遞依賴MySQL和PostgreSQL驅(qū)動(dòng)。如果project-B需要用到MySQL,那么它必須在自己的POM中顯式聲明MySQL驅(qū)動(dòng)。
- exclusions: 排除傳遞性依賴,用于解決依賴沖突。
父 POM 與繼承(Parent)
用于從父 POM 繼承配置,實(shí)現(xiàn)統(tǒng)一管理。類(lèi)似于JAVA中的繼承。
注意點(diǎn):
- 父POM的packaging必須是pom。
- 子POM通過(guò)元素指定父POM,其中g(shù)roupId、artifactId、version必須與父POM的坐標(biāo)一致。
- relativePath:指定查找父POM的相對(duì)路徑。默認(rèn)值是…/pom.xml,即先從本地文件系統(tǒng)查找,如果沒(méi)找到,再?gòu)膫}(cāng)庫(kù)查找。
- 如果設(shè)置為空,則表示不從相對(duì)路徑查找,直接從倉(cāng)庫(kù)查找。
- 繼承的內(nèi)容:父POM中定義的依賴、插件、屬性、依賴管理、插件管理等都可以被繼承。
總的來(lái)說(shuō):
- 父POM:統(tǒng)一配置、依賴版本、默認(rèn)設(shè)置。
- 子POM:繼承配置、使用依賴、覆蓋配置【可以有個(gè)性】。
relativePath規(guī)則:
| 設(shè)置方式 | 策略 | 適用場(chǎng)景 |
|---|---|---|
<relativePath/></font>空標(biāo)簽 | 1. 去本地倉(cāng)庫(kù)找 2. 去遠(yuǎn)程倉(cāng)庫(kù)找 | 父POM是知名框架(Spring Boot) |
<relativePath>../pom.xml</relativePath></font> | 1. 去…/pom.xml找 2. 找不到再去倉(cāng)庫(kù) | 父POM在本地項(xiàng)目里 |
示例1:
子pom文件:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/>
</parent>
<artifactId>my-app</artifactId>
<!-- 只寫(xiě)了自己的名字,其他都沒(méi)寫(xiě) -->實(shí)際生效的配置:
<!-- 自動(dòng)獲得老爸的配置 -->
<properties>
<java.version>11</java.version> <!-- Java 11 -->
<maven.compiler.source>11</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 自動(dòng)獲得依賴版本管理 -->
<dependencyManagement>
<!-- Spring Boot 2.7.0 兼容的所有版本 -->
<spring.version>5.3.20</spring.version>
<jackson.version>2.13.3</jackson.version>
<!-- ... -->
</dependencyManagement>
<!-- 自動(dòng)獲得插件配置 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>項(xiàng)目聚合(Modules)
目的:用于將多個(gè)模塊/子項(xiàng)目聚合在一起,以便一次性構(gòu)建整個(gè)項(xiàng)目。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>my-app-aggregator</artifactId>
<version>1.0</version>
<packaging>pom</packaging> <!-- 必須為pom -->
<modules>
<module>core-module</module> <!-- 相對(duì)路徑,表示聚合項(xiàng)目目錄下的core-module目錄 -->
<module>service-module</module>
<module>web-module</module>
</modules>
</project>這通常用在父 POM(其 packaging 為 pom)中。聚合項(xiàng)目本身可以沒(méi)有源碼,它只是作為一個(gè)構(gòu)建的入口。在聚合項(xiàng)目目錄下執(zhí)行mvn命令,Maven會(huì)根據(jù)模塊間的依賴關(guān)系自動(dòng)確定構(gòu)建順序,依次構(gòu)建每個(gè)模塊。
聚合和繼承經(jīng)常結(jié)合使用:聚合項(xiàng)目同時(shí)作為父項(xiàng)目,提供統(tǒng)一的配置管理。這種情況下,聚合項(xiàng)目的pom.xml中既有也有等配置。
示例:
- 父pom
<project>
<modelVersion>4.0.0</modelVersion>
<!-- 聚合項(xiàng)目的身份證 -->
<groupId>com.mycompany</groupId>
<artifactId>ecommerce-platform</artifactId>
<version>1.0.0</version>
<!-- 關(guān)鍵:打包方式必須是pom -->
<packaging>pom</packaging>
<!-- 聚合的核心:列出所有小弟 -->
<modules>
<module>user-service</module> <!-- 用戶服務(wù)模塊 -->
<module>product-service</module> <!-- 商品服務(wù)模塊 -->
<module>order-service</module> <!-- 訂單服務(wù)模塊 -->
<module>common</module> <!-- 公共模塊 -->
</modules>
<!-- 注意:聚合項(xiàng)目可以同時(shí)是父項(xiàng)目 -->
<properties>
<java.version>11</java.version>
<spring-boot.version>2.7.0</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 統(tǒng)一的依賴版本管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>- 子模塊的配置(以u(píng)ser-service為例)
<!-- user-service/pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<!-- 既可以認(rèn)父(繼承),又可以被聚合 -->
<parent>
<groupId>com.mycompany</groupId>
<artifactId>ecommerce-platform</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<!-- 自己的身份證 -->
<artifactId>user-service</artifactId>
<packaging>jar</packaging> <!-- 子模塊通常是jar或war -->
<dependencies>
<!-- 依賴common模塊 -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- 其他業(yè)務(wù)依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>- 對(duì)比:
不使用聚合:
# 要跑4次命令,還要注意構(gòu)建順序! cd common && mvn clean install cd ../user-service && mvn clean install cd ../product-service && mvn clean install cd ../order-service && mvn clean install
使用后:
# 在聚合項(xiàng)目根目錄,一次搞定! cd ecommerce-platform mvn clean install # Maven自動(dòng)處理: # 1. 分析模塊依賴關(guān)系(common → user-service → ...) # 2. 按正確順序構(gòu)建 # 3. 一次性輸出所有結(jié)果
- 一般微服務(wù)項(xiàng)目結(jié)構(gòu)示例:
platform/ ├── pom.xml(聚合所有微服務(wù)) ├── gateway/(網(wǎng)關(guān)服務(wù)) ├── user-service/(用戶服務(wù)) ├── order-service/(訂單服務(wù)) └── product-service/(商品服務(wù))
屬性(Properties)
用于定義變量,方便統(tǒng)一管理和復(fù)用,常見(jiàn)在父POM中定義公共屬性。
<properties>
<java.version>11</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<spring.version>5.3.20</spring.version>
</properties>
<!-- 在依賴中使用屬性 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>屬性的常見(jiàn)用法:
- 定義公共屬性,如上。
- 多環(huán)境配置【開(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境用不同配置】
<properties>
<!-- 默認(rèn)開(kāi)發(fā)環(huán)境配置 -->
<env>dev</env>
<server.port>8080</server.port>
<database.url>jdbc:mysql://localhost:3306/dev</database.url>
</properties>
<profiles>
<profile>
<id>prod</id>
<properties>
<!-- 生產(chǎn)環(huán)境覆蓋默認(rèn)值 -->
<env>prod</env>
<server.port>80</server.port>
<database.url>jdbc:mysql://prod-server:3306/prod</database.url>
</properties>
</profile>
</profiles>構(gòu)建配置(Build)
用于配置構(gòu)建過(guò)程中的插件和行為。
構(gòu)建配置可以包含兩個(gè)主要部分:
- :用于管理插件的版本和配置,類(lèi)似于依賴管理,它本身不會(huì)實(shí)際引入插件,只是提供一種統(tǒng)一管理的方式。子項(xiàng)目可以繼承并引用這些插件,而無(wú)需指定版本。
- :實(shí)際使用的插件列表,在這里配置的插件會(huì)在構(gòu)建過(guò)程中執(zhí)行。
此外,構(gòu)建配置還包括:
- resources : 定義資源文件(非代碼文件)如何處理,例如配置文件、圖片等。
- testResources:定義測(cè)試資源文件如何處理。
- directory: 構(gòu)建輸出目錄,默認(rèn)為target。
- outputDirectory: 編譯后的class文件輸出目錄,默認(rèn)為target/classes。
- testOutputDirectory: 測(cè)試類(lèi)編譯輸出目錄,默認(rèn)為target/test-classes。
- sourceDirectory: 源代碼目錄,默認(rèn)為src/main/java。
- testSourceDirectory: 測(cè)試代碼目錄,默認(rèn)為src/test/java。
一般為:
<build>
<!-- 1. 源代碼目錄(可以改默認(rèn)位置) -->
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<!-- 2. 資源文件處理 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering> <!-- 是否替換占位符 -->
</resource>
</resources>
<!-- 3. 插件管理(父POM中用) -->
<pluginManagement>
<plugins>
<!-- 定義插件版本和基礎(chǔ)配置 -->
</plugins>
</pluginManagement>
<!-- 4. 實(shí)際使用的插件 -->
<plugins>
<!-- 具體配置每個(gè)插件 -->
</plugins>
<!-- 5. 擴(kuò)展(自定義組件) -->
<extensions>
<!-- 擴(kuò)展Maven核心功能 -->
</extensions>
</build>- 示例1:
<build>
<plugins>
<!-- Spring Boot打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
<configuration>
<mainClass>com.mycompany.app.Application</mainClass>
<!-- lombok只在編譯時(shí)起作用,已經(jīng)變成class了,不需要再打jar包依賴了 -->
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 生成可執(zhí)行JAR -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>- 示例2:
<!-- 在父POM中統(tǒng)一管理插件版本 -->
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<!-- 在子POM中引用,不需要寫(xiě)版本 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!-- 版本從父POM繼承 -->
</plugin>
</plugins>
</build>- 示例3:
<profiles>
<profile>
<id>production</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests> <!-- 生產(chǎn)環(huán)境跳過(guò)測(cè)試 -->
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources-prod</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
</profiles>依賴管理(DependencyManagement)
: 只是一個(gè)聲明,它并不實(shí)際引入依賴。它主要用于統(tǒng)一管理子模塊或項(xiàng)目的依賴版本。子模塊需要顯式聲明依賴,但可以省略 version。如:
示例1:
- 父pom
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
</dependencyManagement>- 子模塊 POM:
<dependencies>
<!-- 不需要寫(xiě)版本,版本由父POM統(tǒng)一管理 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>示例2:
<!-- 直接使用Spring Boot定義的所有版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.0</version>
<type>pom</type>
<scope>import</scope> <!-- 關(guān)鍵:導(dǎo)入整個(gè)版本表 -->
</dependency>
</dependencies>
</dependencyManagement>
<!-- 現(xiàn)在所有Spring Boot相關(guān)的依賴都不用寫(xiě)版本了 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 自動(dòng)使用2.7.0對(duì)應(yīng)的版本 -->
</dependency>
</dependencies>關(guān)鍵標(biāo)簽:合并另一個(gè)POM的依賴管理。類(lèi)似于繼承別人的dependencyManagement一樣。
當(dāng)父POM中配置了,子模塊繼承的是依賴的管理規(guī)則(主要是版本信息),而不是依賴本身。這帶來(lái)了幾個(gè)顯著優(yōu)勢(shì):
- 統(tǒng)一版本管理: 所有子模塊在引用父POM中聲明過(guò)的依賴時(shí),只需指定groupId和artifactId,版本號(hào)會(huì)統(tǒng)一使用父POM中的定義。這能有效避免多模塊間的依賴版本沖突。
- 版本靈活性與覆蓋: 如果某個(gè)子模塊需要特殊版本,它可以在自己的中明確聲明版本號(hào),此時(shí)子模塊的版本號(hào)具有優(yōu)先級(jí),會(huì)覆蓋父POM中的定義。這為特殊需求的模塊提供了靈活性。
- 按需引入依賴: 子模塊只聲明自己真正需要的依賴,避免了父POM中所有依賴被自動(dòng)繼承可能導(dǎo)致的冗余和潛在沖突。這讓每個(gè)模塊的依賴更清晰、更精簡(jiǎn)。
Profile
Profile 允許為不同的環(huán)境(如開(kāi)發(fā)、測(cè)試、生產(chǎn))定義不同的配置。它能夠覆蓋 POM 中的默認(rèn)配置。
<profiles>
<profile>
<id>dev</id>
<properties>
<db.url>jdbc:mysql://localhost:3306/dev</db.url>
</properties>
<activation>
<activeByDefault>true</activeByDefault> <!-- 默認(rèn)激活 -->
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<db.url>jdbc:mysql://prod-server:3306/prod</db.url>
</properties>
</profile>
</profiles># 用命令激活 mvn clean install -P prod
一個(gè)相對(duì)完整的POM
<?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>
<!-- 坐標(biāo) -->
<groupId>com.example</groupId>
<artifactId>my-webapp</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>My Web Application</name>
<!-- 父POM -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<!-- 屬性 -->
<properties>
<java.version>11</java.version>
<junit.version>5.8.2</junit.version>
</properties>
<!-- 依賴管理 -->
<dependencyManagement>
<dependencies>
<!-- 可以在這里管理非Spring Boot管理的依賴 -->
</dependencies>
</dependencyManagement>
<!-- 依賴 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 構(gòu)建配置 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- 多環(huán)境配置 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
</project>到此這篇關(guān)于史上最全maven中的pom詳述的文章就介紹到這了,更多相關(guān)maven pom內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Maven POM文件配置打造高效項(xiàng)目管理的完整指南
- Maven特殊pom.xml配置文件-BOM解讀
- 通過(guò)maven給沒(méi)有pom文件的jar包生成pom文件,maven項(xiàng)目引入本地jar包方式
- Maven pom的distributionManagement配置方式
- 關(guān)于Maven中pom.xml文件配置詳解
- SpringBoot Maven 項(xiàng)目 pom 中的 plugin 插件用法小結(jié)
- 基于Maven pom文件使用分析
- maven關(guān)于pom文件中的relativePath標(biāo)簽使用
- 關(guān)于maven install報(bào)錯(cuò)原因揭秘:parent.relativePath指向錯(cuò)誤的本地POM文件
相關(guān)文章
Java精品項(xiàng)目瑞吉外賣(mài)之后端登錄功能篇
這篇文章主要為大家詳細(xì)介紹了java精品項(xiàng)目-瑞吉外賣(mài)訂餐系統(tǒng),此項(xiàng)目過(guò)大,分為多章獨(dú)立講解,本篇內(nèi)容為后端登錄功能的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Java?Stream流中的filter()使用方法舉例詳解
filter()是Java?Stream?API中的中間操作,用于根據(jù)給定的Predicate條件篩選流中的元素,它通過(guò)接收一個(gè)返回boolean值的函數(shù)(斷言)作為參數(shù),篩選出滿足條件的元素并收集到新的流中,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-11-11
selenium+java+chrome環(huán)境搭建的方法步驟
這篇文章主要介紹了selenium+java+chrome環(huán)境搭建的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過(guò)程解析
這篇文章主要介紹了Java Volatile關(guān)鍵字實(shí)現(xiàn)原理過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Spring security如何實(shí)現(xiàn)記錄用戶登錄時(shí)間功能
這篇文章主要介紹了Spring security如何實(shí)現(xiàn)記錄用戶登錄時(shí)間功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Java如果在try里面執(zhí)行return還會(huì)不會(huì)執(zhí)行finally
這篇文章主要介紹了Java如果在try里面執(zhí)行return,那么還會(huì)不會(huì)執(zhí)行finally,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Springboot項(xiàng)目編譯后未能加載靜態(tài)資源文件的問(wèn)題
這篇文章主要介紹了Springboot項(xiàng)目編譯后未能加載靜態(tài)資源文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
分布式系統(tǒng)中的降級(jí)熔斷設(shè)計(jì)問(wèn)題面試
這篇文章主要為大家介紹了分布式系統(tǒng)中的降級(jí)熔斷設(shè)計(jì)問(wèn)題面試解答,有需要的朋友可以借鑒參考下,希望能有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
Spring?Boot使用Schedule實(shí)現(xiàn)定時(shí)任務(wù)的方法
這篇文章主要介紹了Spring?Boot使用Schedule實(shí)現(xiàn)定時(shí)任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03

