欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

史上最全maven中的pom詳述

 更新時(shí)間:2025年10月09日 14:42:53   作者:TimelyRain_yt  
pom是maven的基本工作單元,它是一個(gè)XML文件,其中包含有關(guān)項(xiàng)目的信息以及Maven用于構(gòu)建項(xiàng)目的配置詳細(xì)信息,本文給大家介紹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)插件作用
compilemaven-compiler-plugin編譯源代碼
testmaven-surefire-plugin運(yùn)行單元測(cè)試
packagemaven-jar-plugin打包成 JAR 文件
installmaven-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):

  1. 父POM的packaging必須是pom。
  2. 子POM通過(guò)元素指定父POM,其中g(shù)roupId、artifactId、version必須與父POM的坐標(biāo)一致。
  3. relativePath:指定查找父POM的相對(duì)路徑。默認(rèn)值是…/pom.xml,即先從本地文件系統(tǒng)查找,如果沒(méi)找到,再?gòu)膫}(cāng)庫(kù)查找。
  4. 如果設(shè)置為空,則表示不從相對(duì)路徑查找,直接從倉(cāng)庫(kù)查找。
  5. 繼承的內(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java精品項(xiàng)目瑞吉外賣(mài)之后端登錄功能篇

    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實(shí)現(xiàn)桌面右下角彈窗效果

    java實(shí)現(xiàn)桌面右下角彈窗效果

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)桌面右下角彈窗效果,模仿類(lèi)似于qq消息彈窗,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java?Stream流中的filter()使用方法舉例詳解

    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)境搭建的方法步驟

    這篇文章主要介紹了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ò)程解析

    這篇文章主要介紹了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í)間功能

    這篇文章主要介紹了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

    這篇文章主要介紹了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)題

    這篇文章主要介紹了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)題面試

    這篇文章主要為大家介紹了分布式系統(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ù)的方法

    這篇文章主要介紹了Spring?Boot使用Schedule實(shí)現(xiàn)定時(shí)任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03

最新評(píng)論