> ## Documentation Index
> Fetch the complete documentation index at: https://blog.pig4cloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# pigx单体的开发与打包优化技巧

版本: 5.6
JDK版本: JDK17
部署模式: 单体

<img src="https://minio.pigx.top/oss/202410/1729591260.png" alt="1729591260" />

在基于 Spring Boot 构建的 Pigx-boot 项目中，模块化开发使得系统的可扩展性和功能性大大提升。然而，默认情况下，单体启动会将所有子模块加载到 `pigx-boot`，导致类加载、扫描等操作非常缓慢，尤其是在开发过程中影响效率。因此，在开发过程中，我们只需要保证与当前业务相关的模块（例如 `auth`、`upms` 等）加载，打包时再加载全部模块。这篇文章将为你提供通过 `profile` 技巧来简化开发与打包过程，避免手动修改 `pom.xml` 文件。

## 1. 问题描述：单体启动的加载效率低下

在开发过程中，`pigx-boot` 项目会默认加载所有子模块。随着项目功能的增加，模块数量也随之增加，导致项目启动时的类加载和扫描过程变得越来越缓慢，影响开发效率。

为了优化开发体验，我们可以选择只加载当前开发工作所需的模块，而无需每次启动时加载整个项目所有模块，这样可以大幅减少开发中的启动时间。

## 2. 解决方案：通过 Profile 进行模块化管理

为了实现开发环境下的快速启动和生产环境下的完整打包，我们可以利用 Maven 的 `profiles` 功能。`profiles` 允许我们定义不同的构建环境，基于不同的场景（如开发、测试、生产），选择性加载所需模块。

### 2.1 开发环境只加载业务相关模块

首先，在 `pigx-boot/pom.xml` 文件中，我们可以通过删除不必要的模块依赖，确保开发环境下只加载当前业务相关的模块，如 `auth` 和 `upms` 模块。这样在开发时，你只需要处理与这些模块相关的依赖和类加载，减少项目启动时间。

`pigx-boot/pom.xml` 删除其他不必要的模块，仅保留必要的模块

```xml theme={null}
<modules>
    <module>pigx-auth</module>
    <module>pigx-upms</module>
    <!-- ，其他模块在生产打包时再引入 -->
</modules>
```

### 2.2 生产环境打包所有模块

为了避免每次打包时都需要手动修改 `pom.xml` 文件，我们可以通过 `profiles` 来动态加载依赖模块。在 `pom.xml` 中定义一个 `prod` profile，用于生产环境下自动加载所有模块。

在 `pigx-boot/pom.xml` 添加如下

```xml theme={null}
<profiles>
    <profile>
        <id>prod</id>
        <dependencies>
            <!-- 代码生成模块 -->
            <dependency>
                <groupId>com.pig4cloud</groupId>
                <artifactId>pigx-codegen</artifactId>
                <version>${project.version}</version>
            </dependency>
            <!-- 其他需要的模块依赖 -->
            ...
        </dependencies>
    </profile>
</profiles>
```

通过这种方式，在开发时只加载基础模块，打包时使用 `prod` profile 加载所有模块，避免手动修改 `pom.xml` 文件。

## 3. 部署命令优化

在生产环境部署时，你可以使用以下命令来激活 `prod` profile，从而打包整个项目：

```bash theme={null}
mvn clean install -T 4 -Pboot,prod
```

`-T 4` 代表使用 4 线程并行编译，`-Pboot,prod` 表示激活 `boot` 和 `prod` profiles。这样既能提高构建速度，又能确保打包时包含所有生产所需模块。

## 4. 总结

通过灵活运用 Maven 的 `profiles` 功能，我们能够有效管理 `pigx-boot` 项目的模块加载，避免开发过程中加载过多无关模块，提升开发效率。同时，通过定义 `prod` profile，我们可以在生产环境下方便地打包所有模块，减少手动配置和修改 `pom.xml` 的繁琐步骤。

这种方法为日常开发和生产部署提供了很大的灵活性和便利性，是在多模块项目中提高效率的一个实用技巧。希望这篇分享能为你在 Pigx-boot 项目的开发和部署过程中带来启发与帮助。
