今天把gateway和ca都启动起来吧,看看能不能一起测试了,再加上之前已经验证过的业务模块,应该这整个金仓的迁移工作就算验证完成了,后面就是其它模块的迁移了,但是因为都是差不多的,所以难度就不大了,今天的工作应该是一个较关键的点,但是磨刀不误砍柴功,咱们先了解一下.trae目录是做什么的?
.trae目录
官方的说法,这个目录是用来存放trae使用的配置和元数据的,这些数据包括什么呢?通常会包含,rule规则、配置文件、缓存数据、工作区设置。
rule规则
项目规则文件是指例如编码规范、构建命令等规则。以我们这个项目为例,因为我没有用系统默认的java和maven环境,因此,就可以在这里填加规则来帮助trae用满足要求的规则来编译项目。那应该如何添加这个规则呢?
我给大家一个例子
# ca 项目规则
## 项目概述
ca 是一个基于 xxx 框架开发的统一认证中心(CA),提供单点登录(SSO)、会话管理和权限控制等功能。
## 环境要求
- **Java**: JDK 1.8
- **Maven**: 3.9.9 或更高版本
- **数据库**: 金仓数据库 (KingbaseES) 或 MySQL
- **Redis**: 用于会话和缓存存储
- **Nacos**: 用于服务注册与发现
## 编译命令
### 重要前提条件
**必须使用指定的 settings-xxx.xml 配置文件进行编译,否则会导致依赖下载失败!**
### 环境变量设置
```powershell
$env:JAVA_HOME = "D:\jdk8.4"
```
### Maven 路径定义
```powershell
$MvnCmd = "D:\apache-maven-3.9.9\bin\mvn.cmd"
$SettingsXml = "D:\conf\settings-zkhz.xml"
```
### 完整编译(所有207个模块)
```powershell
& $MvnCmd clean package -f "d:\pom.xml" -s $SettingsXml -P dev -DskipTests
```
### 快速编译(仅编译guns-main-project模块)
如果只需要编译CA主应用,可以使用以下命令,这样可以节省大量时间:
```powershell
& $MvnCmd clean package -f "d:\pom.xml" -s $SettingsXml -P dev -DskipTests
```
### 编译特定模块及其依赖
如果需要编译特定模块及其依赖,可以使用以下命令:
```powershell
& $MvnCmd clean package -pl main-project -am -s $SettingsXml -P dev -DskipTests
```
其中 `-pl` 指定要编译的模块,`-am` 表示同时编译该模块的依赖项。
## 编译产物
- **CA 主应用**: `d:\target\xxx.jar`
- **Gateway 网关**: `d:\target\xxxx.jar`
## 启动命令
```powershell
$env:JAVA_HOME = "D:\LEO\bin\java\jdk8.4"
java -jar "d:\target\xxxx.jar" --spring.profiles.active=local
```
## 外部服务依赖
在启动 CA 服务前,需要确保以下服务已运行:
- **金仓数据库 (KingbaseES)**: 监听端口 54321
- **Redis 服务器**: 监听端口 6379,使用数据库 10
- **Nacos 服务器**: 监听端口 8848
## 常见问题及解决方案
### 双主类问题
如果遇到以下错误:
```
Unable to find a single main class from the following candidates [cn.stylefeng.guns.GunsApplication, cn.stylefeng.guns.TestGunsApplication]
```
**解决方案**:在 `xxx-main-project/pom.xml` 的 `spring-boot-maven-plugin` 配置中指定主类:
```xml
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
...
<configuration>
<fork>true</fork>
<mainClass>cn.stylefeng.xxx.Application</mainClass>
</configuration>
</plugin>
```
### 控制台输出中文乱码
- **解决方案**:
1. 确保在pom.xml的maven-compiler-plugin中设置了UTF-8编码
2. 在IDE或命令行启动时设置JVM参数: `-Dfile.encoding=UTF-8`
3. Windows系统下可在启动前执行: `chcp 65001` 将控制台代码页设置为UTF-8
### 环境配置问题
项目启动需要以下外部依赖服务,否则会出现相应错误:
1. **金仓数据库 (KingbaseES)**: 提供数据存储功能
2. **Redis 服务器**: 用于会话管理和缓存
3. **Nacos 服务注册中心**: 用于微服务治理
## 环境切换
项目支持多种环境配置,通过 Maven Profile 和 Spring Profile 控制:
- `dev`: 开发环境 (默认)
- `test`: 测试环境
- `local`: 本地环境
- `prod`: 生产环境
启动时指定环境: `--spring.profiles.active={环境名}`
好了,这个就是一个比较完整的编译规则文件,一般我们会把它放在.trae/rules/project_rules.md。大家也可以自行存放,方便自己使用即可。
有了规则文件之后我们怎么用呢?
首先,可以把它当成一个参考文档使用,在你想使用的时候直接打开使用就可以了。但是我知道这肯定不是大家期待的答案,这也就是为什么ai可爱的原因,她可以认真的说一些废话,给我们平填很多快乐,呵呵。那么什么才是我们期待的用法呢?继续往下看。
首先第一种,就是可以直接提问,如果启动项目,姗,还是叫姗吧,ai打起来太麻烦了,她就会根据规则给你输出标准的启动方法。这块你可以任意发挥。她都能理解。
第二种,如果你的规则不是全局的规则,那么也可以在对话框中用#rule来选择你想使用的规则,这样就可以更有针对性。
gateway和ca联合测试
这次我们用spec功能试一下,用/spec开启spec工作流方式,这种方式姗会在.trae/specs/目录下创建一个工作流目录,并且在目录中创建三个文件,包含spec.md,tasks.md,checklist.md。下面我们分别来研究一下。
spec.md
这个是详细的说明了工作流的内容,要做什么,环境是什么,验证等等。用户可以跟据她生成的这个文件对ai对需求的理解进行检查,确保没有歧义。
tasks.md
这个文件是根据spec对工作流进行拆分,分成一个个小任务,用户可以对具体任务划分进行调整或更改,但是这个描述比较范范,可能不太好修改,而且也容易产生歧义,这块其实可以再考虑考虑,我理解这个更像文档的分段,或者就是任务的名称或todolist那种,可能更多的作用是用来索引。让用户了解现在ai做到那里了。
除了这个以外,tasks.md文件中还记录了各个任务的依赖关系。像是一个简化版的工作流,应该也是借鉴了LangGraph的思路。
checklist.md
这个挺有意思的,会吧各种检查点都写出来,这样方便ai的处理,也方便用户的观看。
说着说着,第一个spec已经执行完了,这种写blog+ai开发的模式真的挺好。即学习了东西,又完成了工作,还可以给自己备忘。