# java-ai-agents Companion code for the ankurm.com posts on agents on the JVM. Every number and transcript quoted in a post comes from a file in a module's `output/` folder, and the tests that write those files also assert the same facts, so the build fails when a claim stops being true. | Module | Post | What it shows | |---|---|---| | `embabel` | Embabel: Goal-Oriented AI Agents on the JVM | actions, goals, conditions and cost-based planning with GOAP, compared with plain Spring AI | | `a2a` | A2A Protocol in Java: Agents That Talk to Each Other | agent card, tasks, streaming, input-required and agent-to-agent calls with the A2A Java SDK | ## Versions (verified on Maven Central, 2026-10-11) | Component | Version | Note | |---|---|---| | Embabel `embabel-agent-api` | 1.5.3 | brings Spring AI 2.0.1 and Spring Boot 4.1.1 transitively | | A2A Java SDK `io.github.a2asdk` | 1.0.0.Alpha3 | alpha; targets A2A protocol 1.0. The newest stable release, 0.3.3.Final, targets the 0.3 protocol and its API differs | | JDK | 25 LTS | | | JUnit | 6.1.3 | | ## Run ```bash export JAVA_HOME=/path/to/jdk-25 mvn test # everything mvn test -pl a2a -am # one module ``` No API key is needed. The A2A agents contain no model call, because the protocol is the subject. The Embabel tests use `ScriptedLlmOperations`, the scripted stand-in shipped inside `embabel-agent-api`, and the Spring AI comparison uses a small scripted `ChatModel`. Each module writes its transcripts to `/output/` when you run the tests.