项目结构
Rain 仓库采用 Gradle 多模块结构。
text
Rain/
├─ tools/
│ ├─ function/ # 通用函数、反射、JSON、数据节点
│ ├─ api/ # DI、事件、Loader 等稳定接口
│ └─ rain-test/ # JUnit 5 应用测试支持
├─ enhance/
│ ├─ classloader/ # 自定义类加载器与 Transformer
│ └─ hook/ # 方法 Hook 能力
├─ module/
│ ├─ di/ # 依赖注入与配置
│ ├─ event/ # 事件总线
│ ├─ job/ # 调度任务
│ ├─ controller/ # 协议无关 Controller 框架
│ └─ application/ # 应用启动与模块编排
└─ test/ # 框架自身集成测试依赖方向
function 和 api 位于底层;业务模块依赖它们提供的通用接口。application 组合 di、classloader 与 hook,负责把各模块发现的 Loader 和 ApplicationService 接入统一生命周期。
框架扩展应尽量保持同一方向:
text
业务应用
↓ 依赖
扩展公开 API(注解、接口、上下文)
↓ 依赖
Rain api / function
扩展运行时实现(Loader、Registry、Service)
↓ 依赖
扩展公开 API + Rain application / module公开 API 不应反向依赖应用代码,也不应暴露 ContextImpl、ASM ClassNode 等实现类型。确实需要字节码能力时,将 Transformer 放在独立实现模块中。
下游项目建议
text
src/main/kotlin/com/example/app/
├─ Main.kt
├─ service/
├─ listener/
└─ job/
src/main/resources/conf/
├─ application.properties
├─ dev/
└─ prod/将自己的根包写入 rain.scanPackages,并按运行模式组织覆盖配置。
开发可复用框架时,还应为模块提供 src/main/resources/conf/module/*.properties,让模块自行贡献必要扫描包与默认配置。完整示例见框架模块开发实战。