pom.xml文件说明

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
  Maven项目的核心配置文件,遵循XML格式
  - version: XML版本
  - 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">
    
    <!-- 1. 基础信息配置 -->
    <!-- POM模型版本,固定为4.0.0(当前最新稳定版) -->
    <modelVersion>4.0.0</modelVersion>

    <!-- 2. 项目坐标(唯一标识项目) -->
    <!-- 组织/公司标识,通常为反向域名(如com.example) -->
    <groupId>com.example</groupId>
    <!-- 项目/模块名称,唯一标识groupId下的项目(如demo-project) -->
    <artifactId>springboot-demo</artifactId>
    <!-- 项目版本号,遵循语义化版本(主版本.次版本.修订号) -->
    <version>1.0.0-SNAPSHOT</version>
    <!-- 项目名称(可选),用于文档和IDE显示 -->
    <name>Spring Boot Demo Project</name>
    <!-- 项目描述(可选),简要说明项目用途 -->
    <description>A sample Spring Boot project with Maven</description>
    <!-- 项目URL(可选),通常指向项目仓库或官网 -->
    <url>https://github.com/example/springboot-demo</url>

    <!-- 3. 父项目配置(可选,用于继承配置) -->
    <parent>
        <!-- 父项目坐标,此处继承Spring Boot的 starter parent -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.10</version>
        <!-- 父项目pom.xml的相对路径(默认从仓库查找) -->
        <relativePath/> 
    </parent>

    <!-- 4. 属性配置(全局变量,用于统一管理版本和参数) -->
    <properties>
        <!-- 项目编码格式,确保编译和资源文件使用UTF-8 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 报告输出编码 -->
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- Java编译版本 -->
        <maven.compiler.source>11</maven.compiler.source>
        <!-- 生成的class文件兼容的Java版本 -->
        <maven.compiler.target>11</maven.compiler.target>
        <!-- 自定义依赖版本变量,便于统一升级 -->
        <mybatis.version>3.5.13</mybatis.version>
        <lombok.version>1.18.24</lombok.version>
    </properties>

    <!-- 5. 依赖管理(声明项目所需的外部库) -->
    <dependencies>
        <!-- 示例1:Spring Boot Web Starter(web开发核心依赖) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 版本继承自父项目,无需重复声明 -->
        </dependency>

        <!-- 示例2:数据库访问依赖(MyBatis) -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <!-- 引用properties中定义的版本变量 -->
            <version>${mybatis.version}</version>
        </dependency>

        <!-- 示例3:国产数据库Kingbase驱动 -->
        <dependency>
            <groupId>com.kingbase8</groupId>
            <artifactId>kingbase8</artifactId>
            <version>8.6.0</version>
            <!-- 作用域:仅在编译和测试时有效,运行时由容器提供 -->
            <scope>runtime</scope>
        </dependency>

        <!-- 示例4:简化代码工具(Lombok) -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <!-- 作用域:仅在编译时有效,不打包到最终产物 -->
            <scope>provided</scope>
        </dependency>

        <!-- 示例5:单元测试依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <!-- 作用域:仅在测试阶段有效 -->
            <scope>test</scope>
            <!-- 排除依赖:移除不需要的子依赖(如junit4) -->
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 示例6:本地JAR依赖(非仓库中的特殊JAR) -->
        <dependency>
            <groupId>com.custom</groupId>
            <artifactId>local-sdk</artifactId>
            <version>2.0.0</version>
            <!-- 作用域:系统级依赖,需配合systemPath使用 -->
            <scope>system</scope>
            <!-- 本地JAR路径,建议使用项目相对路径 -->
            <systemPath>${project.basedir}/lib/custom-sdk-2.0.0.jar</systemPath>
        </dependency>
    </dependencies>

    <!-- 6. 构建配置(指定项目打包、编译等规则) -->
    <build>
        <!-- 最终生成的文件名(默认是artifactId-version) -->
        <finalName>${project.artifactId}-${project.version}</finalName>
        
        <!-- 插件配置 -->
        <plugins>
            <!-- 插件1:Spring Boot打包插件(将项目打包为可执行JAR) -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!-- 插件版本继承自父项目 -->
                <configuration>
                    <!-- 允许在打包时跳过测试 -->
                    <skip>false</skip>
                    <!-- 指定主类(Spring Boot入口类) -->
                    <mainClass>com.example.demo.DemoApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <!-- 绑定到Maven的package生命周期 -->
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- 插件2:编译插件(指定Java版本) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- 引用properties中定义的Java版本 -->
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>

            <!-- 插件3:测试插件(配置单元测试行为) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <!-- 跳过测试(开发阶段可临时开启) -->
                    <skipTests>false</skipTests>
                    <!-- 包含特定测试类 -->
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>

        <!-- 资源文件配置(指定需要打包的非Java文件) -->
        <resources>
            <resource>
                <!-- 源目录:src/main/resources下的文件 -->
                <directory>src/main/resources</directory>
                <!-- 是否过滤资源文件(替换${}变量) -->
                <filtering>true</filtering>
                <!-- 包含的文件类型 -->
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

    <!-- 7. 分发管理(配置部署到远程仓库的规则,可选) -->
    <distributionManagement>
        <!-- 快照版本仓库(开发中的版本) -->
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <url>https://repo.example.com/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
        <!-- 发布版本仓库(正式发布的版本) -->
        <repository>
            <id>nexus-releases</id>
            <url>https://repo.example.com/nexus/content/repositories/releases/</url>
        </repository>
    </distributionManagement>

    <!-- 8. 依赖管理(统一管理子模块的依赖版本,可选) -->
    <dependencyManagement>
        <dependencies>
            <!-- 声明依赖版本,但不实际引入,子模块需显式声明才会生效 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>2.0.25</version>
            </dependency>
        </dependencies>

    <!-- 环境配置文件(profiles):区分不同环境的配置 -->
    <profiles>
        <!-- 1. 开发环境(默认激活) -->
        <profile>
            <!-- 环境唯一标识(命令行使用:-Pdev) -->
            <id>dev</id>
            <!-- 默认激活此环境 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <!-- 开发环境特有属性 -->
            <properties>
                <!-- 环境标识(用于资源文件过滤) -->
                <env>dev</env>
                <!-- 开发环境数据库配置 -->
                <db.url>jdbc:mysql://localhost:3306/dev_db</db.url>
                <db.username>dev_user</db.username>
                <db.password>dev_pass</db.password>
                <!-- 开发环境依赖版本(如较低版本的日志组件) -->
                <logback.version>1.2.11</logback.version>
            </properties>
            <!-- 开发环境特有依赖 -->
            <dependencies>
                <!-- 开发环境专用调试工具 -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                    <scope>runtime</scope>
                    <optional>true</optional>
                </dependency>
            </dependencies>
        </profile>

        <!-- 2. 测试环境 -->
        <profile>
            <id>test</id>
            <properties>
                <env>test</env>
                <!-- 测试环境数据库配置 -->
                <db.url>jdbc:mysql://test-server:3306/test_db</db.url>
                <db.username>test_user</db.username>
                <db.password>test_pass</db.password>
                <!-- 测试环境依赖版本 -->
                <logback.version>1.4.8</logback.version>
            </properties>
            <dependencies>
                <!-- 测试环境专用监控工具 -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-actuator</artifactId>
                </dependency>
            </dependencies>
        </profile>

        <!-- 3. 生产环境 -->
        <profile>
            <id>prod</id>
            <properties>
                <env>prod</env>
                <!-- 生产环境数据库配置(实际中可能通过外部配置中心获取) -->
                <db.url>jdbc:mysql://prod-server:3306/prod_db</db.url>
                <db.username>prod_user</db.username>
                <db.password>${prod.db.password}</db.password> <!-- 可通过命令行传入密码 -->
                <!-- 生产环境依赖版本(稳定版) -->
                <logback.version>1.4.8</logback.version>
            </properties>
            <dependencies>
                <!-- 生产环境专用安全组件 -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-security</artifactId>
                </dependency>
            </dependencies>
            <!-- 生产环境构建配置 -->
            <build>
                <plugins>
                    <!-- 生产环境打包时跳过测试 -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <skipTests>true</skipTests>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- 4. 特殊环境:国产化环境(如使用Kingbase数据库) -->
        <profile>
            <id>kingbase</id>
            <properties>
                <env>kingbase</env>
                <db.url>jdbc:kingbase8://kingbase-server:54321/kingbase_db</db.url>
                <db.driver>com.kingbase8.Driver</db.driver>
            </properties>
            <dependencies>
                <!-- 替换默认数据库驱动为Kingbase -->
                <dependency>
                    <groupId>com.kingbase8</groupId>
                    <artifactId>kingbase8</artifactId>
                    <version>8.6.0</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
        </profile>
    </profiles>

    <!-- 构建配置(全局构建规则) -->
    <build>
        <finalName>${project.artifactId}-${project.version}-${env}</finalName>
        
        <!-- 资源文件过滤:根据激活的环境替换配置文件中的变量 -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <!-- 开启过滤:替换资源文件中的${变量名} -->
                <filtering>true</filtering>
                <!-- 包含所有环境通用的配置文件 -->
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!-- 引入环境特定的配置文件(如src/main/resources/dev/...) -->
            <resource>
                <directory>src/main/resources/${env}</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

        <plugins>
            <!-- Spring Boot打包插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.example.Application</mainClass>
                </configuration>
            </plugin>

            <!-- 编译插件:使用全局java.version -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

以上通过豆包生成,仅用作记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值