跳到正文

构建、IDEA 与测试

模块与产物

模块用途是否放生产 plugins/
sealattributes-api公共无平台 API否,compileOnly
sealattributes-core聚合、战斗、来源、资源核心否,已合并主 JAR
sealattributes-adapters:mythicmobsMythic 适配否,已合并主 JAR
sealattributes-paper主运行插件
sealattributes-douluo可选启动扩展extensions/,不放根 plugins
performance/compatibility/verification probes验证工具

根版本 1.0.9,Kotlin 2.3.21,Gradle Wrapper 8.14.3,Java toolchain/JVM target 21。

Windows 完整构建

powershell
cd D:\path\to\SealAttributes
java -version
.\gradlew.bat --version
.\gradlew.bat clean check --rerun-tasks

预期 BUILD SUCCESSFUL。主 JAR:

text
sealattributes-paper/build/libs/SealAttributes-1.0.9.jar

构建通过只证明当前自动化任务;不能替代本轮 MySQL、真实服务器或正式部署。

MySQL 条件测试

测试使用环境变量指向隔离 MySQL,不能用生产库:SEALATTRIBUTES_TEST_MYSQL_URLSEALATTRIBUTES_TEST_MYSQL_USER(缺省 root)和 SEALATTRIBUTES_TEST_MYSQL_PASSWORD(缺省空)。先创建一次性数据库,再运行目标 test;结束后核对测试清理。Windows 与 WSL 的 127.0.0.1 属于不同网络命名空间,数据库和 Java 最好在同一环境运行。

如果 MySQL 条件未提供,测试会 skip;“总任务成功”不代表 MySQL 覆盖执行。检查 JUnit XML 的 skipped 数,而不是只看 Gradle 最后一行。

IDEA 导入

  1. IDEA 使用 JDK 21;Gradle JVM 也选同一个真实 JDK,不选 Microsoft Store stub;
  2. 从根 settings.gradle.kts 打开项目;
  3. 使用 Gradle Wrapper,不改成本机未知 Gradle;
  4. Reload All Gradle Projects;
  5. 检查 Kotlin/Java language level 与 Gradle toolchain;
  6. 若 API consumer 项目红字,先确认 mavenLocal()/私有仓库确实有 cn.seal:sealattributes-api:1.0.9

“CLI 能过但 IDEA 红”排错

CLI build 和 IDEA 模型是两套证据。按顺序:

  1. File > Sync Project with Gradle Files
  2. 查看 Gradle Sync 日志中第一条依赖/verification 错误;
  3. 确认 IDE Gradle JVM=21、offline mode 未误开;
  4. 检查 dependency verification metadata 是否拒绝新 artifact;
  5. 在 Gradle 工具窗确认所有子模块存在;
  6. 必要时 File > Invalidate Caches,但先保存同步日志,不能把它当首选万能修复;
  7. 最终以编辑器 import 解析、Gradle model 和实际编译三者都正常为准。

测试层级必须分开

层级能证明不能证明
单元/契约测试构造器、公式、状态、序列化、并发契约Paper 事件、真实依赖、网络数据库
Gradle check当前源码在当前 JDK 构建服务器可启动、玩家可登录
条件 MySQL 测试指定 MySQL 的 schema/CRUD生产网络、权限与负载
隔离真实服指定 Paper/Leaf 与依赖的生命周期其他平台/版本或正式流量
正式部署复核某一 JAR/配置在目标服启动后续改动仍然有效

真实服最小流程:干净启动、doctor、玩家登录 READY、装备、战斗、治疗、重登、配置重载、数据库中断/恢复演练、正常停服端口释放。记录 JAR SHA、完整版本和日志。

兼容策略

API 以 baseline 比较语义版本,consumer 用 compileOnly 并做编译 fixture。升级前比较公开签名、重新编译第三方插件和扩展,再用目标平台实测。不要因为 api-version: 1.21 就推断所有未来 1.21.x 构建自动兼容。

Minecraft 服务端插件使用与开发文档