# yudao-module-demo
**Repository Path**: sxran/yudao-module-demo
## Basic Information
- **Project Name**: yudao-module-demo
- **Description**: 将微服务的模块维护在独立的仓库
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: demo
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-07-20
- **Last Updated**: 2026-01-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# yudao-module-demo
将微服务的模块维护在独立的仓库
## 背景
不动他的任何代码。 遵循开闭原则。
这里为单独的模块项目,引用jar的方式实现。
可以实现单独的git仓库做不同的业务逻辑。
## 说明
该项目是一个脚手架 基于jdk-17
## build依赖
- 先进入 yudao-cloud 项目中
- 然后在 mvn clean install 到本地仓库就行啦。
## 开发调试
- yudao-server 是单机部署,本地调试的启动方式。
- yudao-module-demo-server 是分布式部署,本地调试的启动方式。
> 建议设置 idea的环境变量为 PROFILES_ACTIVE=my
> 确保 application-my.yaml 不会被提交
## 单机部署说明
- 修改 [ 重要:《Maven 子模块排除 spring-boot-maven-plugin》](https://cloud.iocoder.cn/quick-start/#_8-3-如何打包部署)后重新build
- 请把[yudao-server.xml](yudao-server.xml) 文件替换yudao-server的pom
- 将后续我们的业务模块打包之后放到 对应的 module 文件夹下面.
- 执行`java -cp "yudao-server.jar:module/*" cn.iocoder.yudao.server.YudaoServerApplication`
## 使用 Maven Archetype 生成新项目
### 1. 打包 Archetype 模块
首次使用前,需要将 archetype 模块打包到本地 Maven 仓库:
```bash
cd yudao-module-demo-archetype
mvn clean install -DskipTests
```
### 2. 生成新项目
使用以下命令生成新的模块项目:
```bash
mvn archetype:generate \
-DarchetypeGroupId=cn.iocoder.cloud \
-DarchetypeArtifactId=yudao-module-demo-archetype \
-DarchetypeVersion=2025.09-SNAPSHOT \
-DgroupId=cn.iocoder.cloud \
-DartifactId=yudao-module-new \
-Dversion=2025.09-SNAPSHOT \
-DmoduleName=new \
-DmoduleDescription=新模块 \
-DinteractiveMode=false
```
### 3. 参数说明
- `archetypeGroupId`: Archetype 的 Group ID(固定为 cn.iocoder.cloud)
- `archetypeArtifactId`: Archetype 的 Artifact ID(固定为 yudao-module-demo-archetype)
- `archetypeVersion`: Archetype 的版本号(固定为 2025.09-SNAPSHOT)
- `groupId`: 新项目的 Group ID(通常为 cn.iocoder.cloud)
- `artifactId`: 新项目的 Artifact ID(例如:yudao-module-test)
- `version`: 新项目的版本号(例如:1.0.0-SNAPSHOT)
- `moduleName`: 模块名称(例如:test,用于包名和类名)
- `moduleDescription`: 模块描述(例如:测试模块)
- `interactiveMode`: 是否使用交互模式(false 表示非交互模式)
### 4. 生成的项目结构
生成的项目包含以下内容:
```
yudao-module-new/
├── yudao-module-new-api/ # API 模块
│ ├── src/main/java/
│ │ └── cn/iocoder/yudao/module/new/
│ │ ├── api/
│ │ │ ├── ApiConstants.java
│ │ │ └── ErrorCodeConstants.java
│ └── pom.xml
├── yudao-module-new-server/ # Server 模块
│ ├── src/main/java/
│ │ └── cn/iocoder/yudao/module/new/
│ │ ├── controller/
│ │ │ ├── admin/
│ │ │ │ └── NewTestController.java
│ │ │ └── app/
│ │ │ └── AppNewTestController.java
│ │ ├── framework/
│ │ │ └── security/
│ │ │ └── config/
│ │ │ └── SecurityConfiguration.java
│ │ └── NewServerApplication.java
│ ├── src/main/resources/
│ │ ├── application-local.yaml
│ │ ├── application.yaml
│ │ └── logback-spring.xml
│ └── pom.xml
└── pom.xml
```
### 5. 注意事项
- 确保已安装 JDK 17 或更高版本
- 确保已安装 Maven 3.6 或更高版本
- 首次使用前必须先执行 `mvn clean install` 打包 archetype 模块
- 如果修改了 archetype 模板的模板文件,需要重新打包
- 生成的项目会自动处理目录名、包名和类名的替换
## 更新 Archetype 模板
### 1. 添加新文件到模板
Archetype 模板的文件位于 `yudao-module-demo-archetype/src/main/resources/archetype-resources/` 目录下。
#### 目录结构
```
yudao-module-demo-archetype/src/main/resources/archetype-resources/
├── ${artifactId}-api/ # API 模块模板
│ ├── src/
│ │ └── main/
│ │ └── java/
│ │ └── cn/iocoder/yudao/module/${moduleName}/
│ │ └── api/
│ │ ├── ApiConstants.java
│ │ └── ErrorCodeConstants.java
│ └── pom.xml
├── ${artifactId}-server/ # Server 模块模板
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cn/iocoder/yudao/module/${moduleName}/
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ └── ${capitalizedModuleName}TestController.java
│ │ │ │ └── app/
│ │ │ │ └── App${capitalizedModuleName}TestController.java
│ │ │ ├── framework/
│ │ │ │ └── security/
│ │ │ │ └── config/
│ │ │ │ └── SecurityConfiguration.java
│ │ │ └── ${artifactId}ServerApplication.java
│ │ └── resources/
│ │ ├── application-local.yaml
│ │ ├── application.yaml
│ │ └── logback-spring.xml
│ └── pom.xml
├── .gitignore # 根目录文件
├── pom.xml # 根目录 POM
└── README.md # 根目录 README
```
#### 添加 .gitignore 文件示例
1. 在 `archetype-resources/` 目录下创建 `.gitignore` 文件:
```bash
cd yudao-module-demo-archetype/src/main/resources/archetype-resources
touch .gitignore
```
2. 编辑 `.gitignore` 文件内容:
```gitignore
# Maven
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
# IDE
.idea/
*.iml
*.iws
*.ipr
.vscode/
.settings/
.classpath
.project
# OS
.DS_Store
Thumbs.db
# Logs
*.log
logs/
# Application
application-local.yaml
```
### 2. 更新 archetype-metadata.xml
在 `yudao-module-demo-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml` 中添加新文件的配置。
#### 添加根目录文件
如果要在生成的项目根目录添加 `.gitignore` 文件,需要在 `archetype-metadata.xml` 中配置:
```xml
.
pom.xml
README.md
.gitignore
```
**注意**:
- `filtered="false"` 表示不对文件内容进行变量替换(适用于 .gitignore 等不需要替换的文件)
- `filtered="true"` 表示会对文件内容进行变量替换(适用于需要替换 ${moduleName} 等变量的文件)
#### 添加 Java 文件
如果要添加新的 Java 文件,需要配置对应的文件集:
```xml
${artifactId}-api/src/main/java
**/*.java
${artifactId}-server/src/main/java
**/*.java
```
#### 添加资源文件
如果要添加资源文件(如配置文件),需要配置对应的文件集:
```xml
${artifactId}-server/src/main/resources
**/*
```
### 3. 更新 post-generate 脚本(可选)
如果添加的文件需要特殊的处理逻辑(如重命名、内容替换等),需要在 `archetype-post-generate.groovy` 脚本中添加相应的处理代码。
脚本位置:`yudao-module-demo-archetype/src/main/resources/META-INF/archetype-post-generate.groovy`
#### 常见处理场景
1. **处理 Java 文件的包名和类名**:脚本会自动处理
2. **处理目录名变量替换**:脚本会自动处理 `${artifactId}` 等变量
3. **处理文件名变量替换**:脚本会自动处理 `${capitalizedModuleName}` 等变量
如果不需要特殊处理,则无需修改脚本。
### 4. 重新打包 Archetype
修改完模板文件后,需要重新打包到本地 Maven 仓库:
```bash
cd yudao-module-demo-archetype
mvn clean install -DskipTests
```
### 5. 测试新模板
重新打包后,可以使用 `mvn archetype:generate` 命令测试新添加的文件是否正确生成:
```bash
mvn archetype:generate \
-DarchetypeGroupId=cn.iocoder.cloud \
-DarchetypeArtifactId=yudao-module-demo-archetype \
-DarchetypeVersion=2025.09-SNAPSHOT \
-DgroupId=cn.iocoder.cloud \
-DartifactId=yudao-module-test \
-Dversion=1.0.0-SNAPSHOT \
-DmoduleName=test \
-DmoduleDescription=测试模块 \
-DinteractiveMode=false
```
### 6. 可用变量说明
在模板文件中,可以使用以下变量:
- `${artifactId}`: 项目 Artifact ID(如 yudao-module-test)
- `${groupId}`: 项目 Group ID(如 cn.iocoder.cloud)
- `${version}`: 项目版本号(如 1.0.0-SNAPSHOT)
- `${moduleName}`: 模块名称(如 test)
- `${moduleDescription}`: 模块描述
- `${capitalizedModuleName}`: 首字母大写的模块名(如 Test)
- `${package}`: 包名(默认为 groupId)
### 7. 更新流程总结
1. 在 `archetype-resources/` 目录下添加新文件
2. 在 `archetype-metadata.xml` 中配置新文件的文件集
3. 如需要,在 `archetype-post-generate.groovy` 中添加处理逻辑
4. 执行 `mvn clean install -DskipTests` 重新打包
5. 使用 `mvn archetype:generate` 测试生成的新项目
## 出自于
https://github.com/MaskWolf/yudao-module-demo.git