This directory contains Bill of Materials (BOM) modules for the A2A Java SDK project, providing dependency management for external users.
The A2A Java SDK provides three BOMs for different use cases:
a2a-java-sdk-bom- Core SDK BOM for general A2A agent developmenta2a-java-sdk-extras-bom- Extras BOM with server-side enhancements (task stores, queue managers)a2a-java-sdk-reference-bom- Reference implementations BOM with Quarkus dependencies
Artifact: org.a2aproject.sdk:a2a-java-sdk-bom
The SDK BOM includes:
- All A2A SDK core modules (spec, server, client, transport)
- Core third-party dependencies (Jackson, gRPC, SLF4J)
- Jakarta APIs (CDI, Inject, JSON, JAX-RS)
- Test utilities
Use this BOM when: Building A2A agents with any framework (Quarkus, Spring Boot, vanilla Java, etc.)
Artifact: org.a2aproject.sdk:a2a-java-sdk-extras-bom
The Extras BOM includes:
- Everything from
a2a-java-sdk-bom(via import) - Server-side enhancement modules (database persistence, distributed queue management, etc.)
Use this BOM when: Building production A2A servers needing advanced server-side features beyond the core SDK
Artifact: org.a2aproject.sdk:a2a-java-sdk-reference-bom
The Reference BOM includes:
- Everything from
a2a-java-sdk-bom(via import) - Quarkus BOM (complete Quarkus platform)
- A2A reference implementation modules (JSON-RPC, gRPC, REST)
- TCK module for testing
Use this BOM when: Building Quarkus-based A2A agents or reference implementations
Add to your project's pom.xml:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-bom</artifactId>
<version>${org.a2aproject.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- No version needed - managed by BOM -->
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-server-common</artifactId>
</dependency>
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-transport-jsonrpc</artifactId>
</dependency>
</dependencies>Add to your project's pom.xml:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-extras-bom</artifactId>
<version>${org.a2aproject.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- No version needed - managed by BOM -->
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-server-common</artifactId>
</dependency>
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-extras-task-store-database-jpa</artifactId>
</dependency>
</dependencies>Add to your project's pom.xml:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-reference-bom</artifactId>
<version>${org.a2aproject.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- A2A SDK and Quarkus versions both managed -->
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-reference-jsonrpc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
</dependencies>Important: The A2A Java SDK project itself does NOT import these BOMs in the parent pom.xml. The BOMs are
for the convenience of external users.
- Parent
pom.xml<dependencyManagement>is the single source of truth for versions - BOMs are maintained to match parent pom versions
- When updating dependencies, update both parent pom and relevant BOMs
- BOMs are separate artifacts for external consumption only
All three BOMs include maven-invoker-plugin integration tests that automatically verify:
- ✅ BOM can be imported correctly
- ✅ All declared dependencies resolve
- ✅ No missing versions or conflicts
- ✅ Code using the BOM compiles successfully
boms/
├── sdk/
│ └── src/it/
│ ├── settings.xml # Test repository config
│ └── sdk-usage-test/ # Integration test project
│ ├── pom.xml # Imports SDK BOM
│ └── src/main/java/ # Test code using SDK
├── extras/
│ └── src/it/
│ └── extras-usage-test/ # Integration test project
│ ├── pom.xml # Imports Extras BOM
│ └── src/main/java/ # Test code using SDK + Extras
└── reference/
└── src/it/
└── reference-usage-test/ # Integration test project
├── pom.xml # Imports Reference BOM
└── src/main/java/ # Test code using Quarkus + SDK
Tests run automatically during mvn install:
# Test all BOMs
mvn clean install -DskipTests -pl boms/sdk,boms/extras,boms/reference
# Test individual BOM
mvn clean install -DskipTests -pl boms/sdkWhat happens:
- BOM is installed to
target/local-repo/ - Test project builds using the BOM
- If compilation succeeds → BOM is valid ✅
- If dependencies missing → Build fails ❌
When updating dependencies in the project:
- Update parent
pom.xml- Change version properties and dependencyManagement - Update SDK BOM (
boms/sdk/pom.xml) - Sync core dependency versions - Update Extras BOM (
boms/extras/pom.xml) - Sync if extras modules changed - Update Reference BOM (
boms/reference/pom.xml) - Sync if Quarkus or reference modules changed - Run automated tests - Integration tests will catch any missing dependencies:
mvn clean install -DskipTests -pl boms/sdk,boms/extras,boms/reference
When adding new SDK modules or dependencies:
- Add to appropriate BOM's
<dependencyManagement> - Add usage example in
src/it/*/src/main/java/test code - Run tests to verify compilation
- Tests will fail if versions are missing or incorrect
The BOMs use ${project.version} for all A2A SDK modules, ensuring:
- BOMs always reference the correct SDK version
- Version updates only need to change parent pom
- No version drift between BOMs and SDK modules
Maven's reactor automatically orders them correctly based on their <dependencies> declarations, regardless of their position in the parent pom's <modules> section.