mohのAI正在绞尽脑汁想思路ING···
mohのAI摘要
mohのAI-Lite

在snowy框架中新增一个自定义模块(或插件),需要遵循清晰的多模块项目管理规范,其核心思想是通过模块化分离,实现功能插件的独立开发、统一管理与集成.

一、项目结构与模块划分原则

snowy的插件体系采用“接口-实现”分离的架构

1、插件接口处(snowy-plugin-api/): 存放模块的API定义、DTO、枚举、常量等公共内容。此模块的职责是定义契约,不包含具体实现,可供其他模块依赖以调用接口。

2、插件实现从(snowy-plugin/):存放模块的业务逻辑、控制器、服务实现、Mapper、资源配置等具体实现代码。

3、主启动模块(snowy—plugin-app):作为最终的应用入口,负责集成和启动所有功能插件。

二、新增自定义模块“A”的详细步骤

假设新增的模块名为 a

步骤1: 创建插件接口模块

  1. snowy-plugin-api目录下,创建模块 snowy-plugin-a-api

  2. 编辑 snowy-plugin-a-apipom.xml,必须引入公共核心模块 snowy-common,以确保能使用框架的基础设施。

    1
    2
    3
    4
    5
    <!-- 位于 snowy-plugin-a-api/pom.xml -->
    <dependency>
    <groupId>vip.xiaonuo</groupId>
    <artifactId>snowy-common</artifactId>
    </dependency>
  3. snowy-plugin-api目录的父级 pom.xml中,声明此子模块,以将其纳入统一构建。

    1
    2
    <!-- 位于 snowy-plugin-api/pom.xml 的 modules 部分 -->
    <module>snowy-plugin-a-api</module>

步骤2:创建插件实现模块

  1. snowy-plugin目录下,创建模块 snowy-plugin-a

  2. 编辑 snowy-plugin-apom.xml必须引入步骤1创建的自身API模块 snowy-plugin-a-api,以实现对接口定义的依赖

    1
    2
    3
    4
    5
    6
    <!-- 位于 snowy-plugin-a/pom.xml -->
    <dependency>
    <groupId>vip.xiaonuo</groupId>
    <artifactId>snowy-plugin-a-api</artifactId>
    <version>${project.parent.version}</version>
    </dependency>
  3. snowy-plugin目录的父级 pom.xml中,声明此子模块.

    1
    2
    <!-- 位于 snowy-plugin/pom.xml 的 modules 部分 -->
    <module>snowy-plugin-a</module>

步骤3:在主启动模块中集成插件

1、编辑主应用模块 snowy-web-apppom.xml,引入插件的实现模块 snowy-plugin-a。这是插件功能被实际加载到运行中的应用的关键步骤。

1
2
3
4
5
6
<!-- 位于 snowy-web-app/pom.xml -->
<dependency>
<groupId>vip.xiaonuo</groupId>
<artifactId>snowy-plugin-a</artifactId>
<version>${project.parent.version}</version>
</dependency>

步骤4:在项目根POM中进行总声明(关键且易遗漏步骤)

1、编辑项目最顶层的根目录下的 pom.xml文件。

2、在 <modules>部分,添加新增的两个模块,确保它们能被Maven顶级构建正确识别和编译。

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>vip.xiaonuo</groupId>
<artifactId>snowy-plugin-a</artifactId>
<version>${snowy.version}</version>
</dependency>
<dependency>
<groupId>vip.xiaonuo</groupId>
<artifactId>snowy-plugin-a-api</artifactId>
<version>${snowy.version}</version>
</dependency>