创建父工程

前言

父工程(Parent Project)主要用于统一管理项目的依赖版本、插件配置以及子模块的聚合构建。 通过父工程,可以在多模块项目中实现依赖的集中管理、版本控制与构建流程统一,为各个子服务提供一致的开发基础。

新建父工程 cloud2025

imgimg
建议

父工程只承担依赖管理与模块聚合的作用,不需要源码或资源文件,因此建议删除 pom.xml 以外的所有文件,保持工程结构简洁清晰。

img

基础设置

接下来需要为父工程进行基础配置,包括:字符编码设置、注解处理器激活、Java 编译版本指定以及文件类型过滤等,以确保工程在构建和编译时保持一致性,避免因环境差异导致的编译或运行问题。

设置文件编码

为防止出现中文乱码或文件编码不一致的问题,应统一项目的字符集编码为UTF-8

img

注解生效激活

为了确保如 @Autowired@Component@Service 等注解能够正常解析,需要在构建中开启注解处理器(Annotation Processing)。

img

Java编译版本

为保证项目在不同环境下的一致性,确保父工程及所有子模块在相同 Java 版本下编译,避免因版本差异导致的语法或兼容性问题,应统一指定 Java 编译版本(例如 Java 21)。

img

文件类型过滤

为了保持项目结构简洁,可以在 IDEA 中设置文件类型过滤,隐藏日志、编译缓存、临时配置等无关文件,避免无关内容干扰视图展示,从而使项目目录更清晰、聚焦于核心代码。

常见可过滤的文件类型包括:.imltarget/.idea/*.log*.tmp 等,这些文件无需纳入版本管理,也不影响项目构建。

img

父工程pom文件

父工程的 pom.xml 是多模块项目的核心配置文件,主要作用包括:

  1. 聚合子模块:通过 <modules> 标签将所有子模块统一管理,支持一次构建打包整个项目。
  2. 统一依赖管理:通过 <dependencyManagement> 统一管理各模块的依赖版本,避免版本冲突。
  3. 统一插件配置:集中配置 Maven 插件(如编译器插件、资源插件等),保证构建行为一致。
  4. 定义公共属性:设置项目通用属性,如 Java 版本、字符编码、注解处理器等,使子模块继承统一配置,减少重复配置。

总结:父工程 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/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 
 <groupId>com.sun.cloud</groupId>
 <artifactId>cloud2025</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>pom</packaging>
 
 <properties>
     <maven.compiler.source>21</maven.compiler.source>
     <maven.compiler.target>21</maven.compiler.target>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <hutool.version>5.8.36</hutool.version>
     <lombok.version>1.18.36</lombok.version>
     <druid.version>1.2.24</druid.version>
     <mybatis.springboot.version>3.0.4</mybatis.springboot.version>
     <mysql.version>9.2.0</mysql.version>
     <swagger3.version>2.6.0</swagger3.version>
     <mapper.version>5.0.0</mapper.version>
     <fastjson2.version>2.0.56</fastjson2.version>
     <persistence-api.version>3.2.0</persistence-api.version>
     <spring.boot.test.version>3.2.4</spring.boot.test.version>
     <spring.boot.version>3.2.4</spring.boot.version>
     <spring.cloud.version>2023.0.1</spring.cloud.version>
     <spring.cloud.alibaba.version>2023.0.1.0</spring.cloud.alibaba.version>
 </properties>
 
 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-parent</artifactId>
             <version>${spring.boot.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
             <version>${spring.cloud.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-alibaba-dependencies</artifactId>
             <version>${spring.cloud.alibaba.version}</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
         <dependency>
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
             <version>${mybatis.springboot.version}</version>
         </dependency>
         <dependency>
             <groupId>com.mysql</groupId>
             <artifactId>mysql-connector-j</artifactId>
             <version>${mysql.version}</version>
         </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid-spring-boot-starter</artifactId>
             <version>${druid.version}</version>
         </dependency>
         <dependency>
             <groupId>tk.mybatis</groupId>
             <artifactId>mapper</artifactId>
             <version>${mapper.version}</version>
         </dependency>
         <dependency>
             <groupId>jakarta.persistence</groupId>
             <artifactId>jakarta.persistence-api</artifactId>
             <version>${persistence-api.version}</version>
         </dependency>
         <dependency>
             <groupId>com.alibaba.fastjson2</groupId>
             <artifactId>fastjson2</artifactId>
             <version>${fastjson2.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springdoc</groupId>
             <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
             <version>${swagger3.version}</version>
         </dependency>
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
             <version>${hutool.version}</version>
         </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <version>${lombok.version}</version>
             <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <version>${spring.boot.test.version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
 </dependencyManagement>
 
</project>

dependencyManagement

  1. Maven 提供了 dependencyManagement 元素,用于集中管理依赖的版本号。
  2. 通常在一个组织或项目的顶层父 POM 中定义 dependencyManagement,用于对子模块的依赖版本进行统一管理。
  3. 使用 dependencyManagement 可以让子模块在引用依赖时无需显式声明版本号。Maven 会沿着父子层级向上查找,直到找到定义了 dependencyManagement 的父项目,并自动采用其中指定的版本。
  4. 这种方式的优势在于:
    • 多个子项目共享同一依赖时,无需重复声明版本号,减少维护成本。
    • 升级依赖时,只需在父 POM 中修改版本号即可,全局自动生效。
    • 若某个子项目需使用不同版本,可在本地显式声明 version 覆盖父配置。
  5. dependencyManagement 仅用于声明依赖版本,并不会实际引入依赖。子项目仍需在自身的 dependencies 中显式声明所需依赖。
  6. 若子项目未声明依赖项,则父项目的 dependencyManagement 不会自动生效;只有在子项目中显式声明依赖且未指定版本号时,才会继承父 POM 中定义的版本与作用域。
  7. 如果子项目中定义了版本号,则会优先生效,覆盖父项目中的配置。

跳过单元测试

方式一:配置pom.xml(不推荐)
<build>
  <!-- maven中跳过单元测试 -->
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <skip>true</skip>
      </configuration>
    </plugin>
  </plugins>
</build>
方式二:IDEA 设置 (推荐)
img

Mysql 驱动说明

在 Spring Boot 项目中,根据 MySQL 不同版本选择合适的 JDBC 驱动,并配置数据源。下面列出常用的 MySQL 5、8、9 驱动配置示例及区别。

MySQL5
  1. 引入依赖
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.47</version>
</dependency>
  1. 配置数据源
jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/db2025?useUnicode=true&characterEncoding=UTF-8&useSSL=false
jdbc.user = root
jdbc.password =123456

⚠️ 注意:MySQL 5 驱动使用旧的 com.mysql.jdbc.Driver

MySQL8
  1. 引入依赖
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.11</version>
</dependency>
  1. 配置数据源
jdbc.driverClass = com.mysql.cj.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/db2025?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
jdbc.user = root
jdbc.password =123456

⚠️ 注意:MySQL 8 驱动采用 com.mysql.cj.jdbc.Driver

MySQL9
  1. 引入依赖
<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>9.2.0</version>
</dependency>
  1. 配置数据源
jdbc.driverClass = com.mysql.cj.jdbc.Driver
jdbc.url= jdbc:mysql://localhost:3306/db2025?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
jdbc.user = root
jdbc.password =123456

⚠️ 注意:MySQL 9 主要更新了 Maven 坐标为 mysql-connector-j,驱动配置与 8.x 基本相同,兼容新特性和最新协议。

相关文章

评论区