| # Client Split Migration Progress |
| |
| ## Baseline |
| |
| - Working branch: `split-client-jdk8-base` |
| - Base branch: `origin/2.7.0.1-jdk8-release` |
| - Goal: keep the split client repository JDK 8 compatible while preparing it to absorb client-only changes from the main ShenYu repository. |
| |
| ## Done |
| |
| - Selected the existing `2.7.0.1-jdk8-release` branch as the migration base because it already preserves Java 8 source level and Apache release metadata. |
| - Added the MCP client module from the main ShenYu repository. |
| - Rebased MCP module POMs onto `shenyu-client-java` and removed Spring Boot 3 / springdoc starter coupling. |
| - Added MCP registration DTO, disruptor subscriber, RPC/data types, and HTTP register path support in `shenyu-client-core`. |
| - Added a Java 8 compatible `RequestMethodUtils` for MCP method and parameter discovery. |
| - Added the Spring Boot starter client modules from the main ShenYu repository. |
| - Rebased starter POMs onto this split client repo and rewired imports to `shenyu-client-core`. |
| - Restored the beat register client and beat Spring Boot starter. |
| - Restored the registry API module needed by instance registration. |
| - Restored Spring MVC, gRPC, and Spring WebSocket discovery instance auto-configuration. |
| - Added the minimal client-core DTO/config/registry support needed by beat and discovery without pulling in the full main-repo `shenyu-common` module. |
| - Updated GitHub Actions CI to run the Maven build on JDK 8, 17, 21, 23, and 25. |
| - Kept the SOFA starter test dependency on the JDK 8 compatible SOFA Boot 3.1.4 line. |
| - Upgraded JaCoCo to 0.8.15 so coverage instrumentation recognizes JDK 25 class files. |
| - Overrode Byte Buddy test dependencies to 1.18.10 so Mockito 3.x tests can run on JDK 21, 23, and 25 while preserving JDK 8 runtime compatibility. |
| |
| ## Verification |
| |
| - `./mvnw -pl shenyu-client-mcp/shenyu-client-mcp-register -am -DskipTests compile` passed. |
| - `./mvnw -pl shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-beat -am -DskipTests compile` passed. |
| - `./mvnw -DskipTests compile` passed. |
| - `./mvnw -DskipTests test` passed. |
| - `./mvnw -pl shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-springmvc -am test` passed. |
| - `./mvnw test` passed across the full 30-module reactor. |
| - `JAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./mvnw -B clean test -Prelease` passed across the full 30-module reactor. |
| - `JAVA_HOME=$(/usr/libexec/java_home -v 17) ./mvnw -B clean test -Prelease` passed across the full 30-module reactor. |
| - `JAVA_HOME=$(/usr/libexec/java_home -v 21) ./mvnw -B clean test -Prelease` passed across the full 30-module reactor. |
| - `JAVA_HOME=$(/usr/libexec/java_home -v 25) ./mvnw -B clean test` passed across the full 30-module reactor after the JaCoCo and Byte Buddy upgrades. |
| - Downloaded Temurin JDK 23.0.2+7 from Adoptium to `/tmp/shenyu-jdks`, verified SHA256 `749993e751f085c7ae713140066a90800075e4aeedfac50a5ed0c5457131c5a0`, and ran `JAVA_HOME=/tmp/shenyu-jdks/jdk-23.0.2+7/Contents/Home ./mvnw -B clean test` successfully across the full 30-module reactor. |
| - Re-ran `JAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./mvnw -B clean test` successfully after the JaCoCo and Byte Buddy upgrades. |
| - The CI command now omits `-Prelease` because Maven reports that profile does not exist in this split repository. |
| - `.github/workflows/ci.yml` YAML parsing passed. |
| - Compatibility scan found no remaining old `org.apache.shenyu.common`, `org.apache.shenyu.register.common`, `org.apache.shenyu.register.client.http`, or `jakarta.*` imports in the restored beat/discovery code. |
| - Java 8 syntax scan found no `List.of`, `Map.of`, `Set.of`, or pattern-matching `instanceof` usage in the migrated MCP/starter modules. |
| - The full test run still logs existing background exceptions from original async tests under JDK 17, but Surefire reports reactor success. |
| |
| ## Next Steps |
| |
| - Confirm the expanded GitHub Actions matrix on the remote runner after opening the pull request. |
| - Verify beat and discovery instance registration against matching admin/bootstrap runtime. |
| - Verify `/shenyu-client/register-mcp` against the matching admin side before treating MCP registration as end-to-end complete. |