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.