@@ -58,21 +58,21 @@ than large ones; if a change is big, say so early and we'll help break it down.
5858
5959## Development setup
6060
61- The build targets JDK 21 LTS (` --release 21 ` ) and is driven entirely by the
62- bundled Gradle wrapper — do not install Gradle separately. CI runs on Temurin
63- 21 and 25; either works locally. Clone, point ` JAVA_HOME ` at a JDK 21+, and
64- let the wrapper resolve everything else:
61+ The build targets JDK 21 LTS (` --release 21 ` ) and runs through Apache Maven
62+ 3.9+. CI runs on Temurin 21 and 25; either works locally. Install Maven (or use
63+ your IDE's bundled copy), clone, and point ` JAVA_HOME ` at a JDK 21+:
6564
6665``` sh
6766git clone https://github.com/nficano/arpc.git
6867cd arpc/java-sdk
6968export JAVA_HOME=$( /usr/libexec/java_home -v 21) # macOS; use your distro's equivalent
70- ./gradlew help # bootstraps the wrapper + toolchain
69+ mvn -version # confirm Maven 3.9+ on JDK 21+
7170```
7271
73- The build is a multi-module Gradle project (` arcp-core ` , ` arcp-client ` ,
72+ The build is a Maven multi-module reactor (` arcp-core ` , ` arcp-client ` ,
7473` arcp-runtime ` , the ` arcp ` umbrella, transport adapters, middleware, the TCK,
75- and example/recipe projects); ` settings.gradle.kts ` is the canonical list.
74+ and example/recipe projects); ` pom.xml ` at the repo root is the canonical
75+ ` <modules> ` list.
7676
7777## Tests and conformance
7878
@@ -81,13 +81,13 @@ Two layers must pass before a PR merges:
8181- ** Unit tests** — this SDK's own suite:
8282
8383 ``` sh
84- ./gradlew build
84+ mvn verify
8585 ```
8686
87- ` build ` compiles every module, runs Spotless, and executes the JUnit 5 +
88- jqwik suites across all subprojects. Use ` ./gradlew test` (or
89- ` ./gradlew :arcp-core:test ` ) to skip compilation of unrelated modules during
90- iteration.
87+ ` verify ` compiles every module, runs Spotless, and executes the JUnit 5 +
88+ jqwik suites across all subprojects. Use ` mvn -pl arcp-core test` (with
89+ ` -am ` to also rebuild upstream modules ) to skip compilation of unrelated
90+ modules during iteration.
9191
9292- ** Conformance** — the SDK's behavior against the reference runtime. New
9393 protocol-facing code (session negotiation, event sequencing, lease handling,
@@ -97,7 +97,7 @@ Two layers must pass before a PR merges:
9797 point it at any ` Transport ` pair — ` MemoryTransport.pair() ` for the in-process
9898 reference runtime, or a live WebSocket pair via ` arcp-runtime-jetty ` +
9999 ` arcp-client ` 's ` WebSocketTransport.connect(uri) ` . Run with
100- ` ./gradlew : arcp-tck: test` .
100+ ` mvn -pl arcp-tck -am test` .
101101
102102CI runs both on every PR. A PR that changes which feature flags the SDK
103103negotiates must also update the README feature matrix in the same change.
@@ -107,15 +107,19 @@ negotiates must also update the README feature matrix in the same change.
107107Formatting is enforced by [ Spotless] ( https://github.com/diffplug/spotless )
108108configured with Google Java Format and unused-import removal. The same JDK 21
109109` javac ` settings (` -Xlint:all ` , ` -parameters ` , UTF-8) and Javadoc generation
110- that CI uses are applied to every ` java- library` subproject :
110+ that CI uses are applied to every library module via the parent POM :
111111
112112``` sh
113- ./gradlew spotlessApply # auto-format
114- ./gradlew spotlessCheck # verify (CI gate on JDK 21)
115- ./gradlew build # compile + lint warnings + tests
116- ./gradlew javadoc # Javadoc for the published modules
113+ mvn spotless:apply # auto-format
114+ mvn spotless:check # verify (CI gate on JDK 21)
115+ mvn verify # compile + lint warnings + tests
116+ mvn javadoc:javadoc # Javadoc for the published modules
117117```
118118
119+ The pinned Spotless 2.44.x uses a google-java-format build that can't run
120+ on JDK 25's javac internals; pass ` -Darcp.skip.spotless=true ` when iterating
121+ on JDK 25 locally. CI pins the Spotless gate to JDK 21.
122+
119123Beyond formatting, the house style is captured in the existing code: records
120124for value types, sealed hierarchies (` Message ` , ` EventBody ` , ` ArcpException ` )
121125for exhaustive dispatch, JSpecify ` @Nullable ` on anything that may return null,
@@ -143,8 +147,8 @@ the changelog. Prefer clarity over cleverness in a library others build on.
143147
144148Releases are cut by maintainers. The ` release ` GitHub Actions workflow is
145149dispatched manually with a version input; it builds, signs with the project
146- PGP key, publishes the aggregated set of ` dev.arcp:* ` artifacts to Maven
147- Central via the ` com.gradleup.nmcp ` plugin, and pushes a ` vX.Y.Z ` tag.
150+ PGP key, publishes the ` dev.arcp:* ` artifacts to Maven Central via the
151+ ` central-publishing-maven- plugin` , and pushes a ` vX.Y.Z ` tag.
148152Detailed operator steps live in [ RELEASING.md] ( RELEASING.md ) . The SDK is
149153versioned with semantic versioning independently of the protocol version it
150154speaks; a protocol version bump is noted in the changelog when the negotiated
0 commit comments