This guide covers building the Ditto CoT library from source across all supported languages and platforms.
Quick Navigation: Getting Started | Testing Guide | Troubleshooting | Architecture
- Prerequisites
- Unified Build System
- Language-Specific Builds
- Build Outputs
- Development Builds
- Troubleshooting
All Platforms:
- Git
- Make (optional but recommended)
For Rust:
- Rust 1.70+ with Cargo
- System dependencies for your platform
For Java:
- JDK 17 or later
- Gradle 7.0+ (wrapper included)
For C# (planned):
- .NET SDK 6.0+
Linux/macOS:
# Install development tools
# Ubuntu/Debian:
sudo apt-get install build-essential git
# macOS:
xcode-select --installWindows:
# Install Visual Studio Build Tools or Visual Studio
# Ensure Git is available in PATHThe repository includes a top-level Makefile providing unified commands across all languages:
# Build all language libraries
make all
# Build specific language
make rust
make java
make csharp
# Clean all builds
make clean
# Run tests for all languages
make test
# Show all available commands
make help| Command | Description |
|---|---|
make all |
Build all language implementations |
make rust |
Build Rust library |
make java |
Build Java library |
make csharp |
Build C# library (planned) |
make test |
Run tests for all languages |
make test-rust |
Run Rust tests only |
make test-java |
Run Java tests only |
make clean |
Clean all build artifacts |
make example-rust |
Build and run Rust integration example |
make example-java |
Build and run Java integration example |
make test-integration |
Run cross-language integration tests |
Build Tool: Cargo with custom build script
cd rust
# Standard build
cargo build
# Release build (optimized)
cargo build --release
# Build with all features
cargo build --all-features
# Build specific examples
cargo build --example e2e_testThe Rust implementation uses build.rs for:
- Code generation from JSON schema
- Underscore-prefixed field handling
- Cross-platform compatibility
Cargo.toml features:
[features]
default = ["serde"]
serde = ["dep:serde", "dep:serde_json"]
ditto-sdk = ["dep:dittolive_ditto"]rust/target/
├── debug/
│ ├── libditto_cot.rlib # Rust library
│ └── examples/ # Example binaries
└── release/
└── libditto_cot.rlib # Optimized library
Build Tool: Gradle with wrapper
cd java
# Standard build (includes tests, Javadoc, fat JAR)
./gradlew build
# Quick compile without tests
./gradlew compileJava
# Generate Javadoc
./gradlew javadoc
# Build fat JAR with dependencies
./gradlew fatJar
# Run specific test suite
./gradlew test --tests "com.ditto.cot.*"| Task | Description |
|---|---|
build |
Full build with tests and documentation |
compileJava |
Compile source code only |
test |
Run unit tests |
javadoc |
Generate API documentation |
fatJar |
Create JAR with all dependencies |
clean |
Remove build artifacts |
Key Gradle settings:
- Java compatibility: 17
- Encoding: UTF-8
- Test framework: JUnit 5
- Code coverage: JaCoCo
java/build/
├── libs/
│ ├── ditto-cot-1.0-SNAPSHOT.jar # Main JAR
│ ├── ditto-cot-1.0-SNAPSHOT-sources.jar # Source JAR
│ ├── ditto-cot-1.0-SNAPSHOT-javadoc.jar # Documentation JAR
│ └── ditto-cot-all.jar # Fat JAR (all dependencies)
├── docs/javadoc/ # Generated documentation
└── reports/
├── tests/ # Test reports
└── jacoco/ # Coverage reports
Build Tool: .NET SDK
cd csharp
# Build library
dotnet build
# Build release
dotnet build -c Release
# Run tests
dotnet test
# Create package
dotnet packDevelopment: rust/target/debug/libditto_cot.rlib
Release: rust/target/release/libditto_cot.rlib
Documentation: Generated via cargo doc
Main JAR: java/build/libs/ditto-cot-1.0-SNAPSHOT.jar
Fat JAR: java/build/libs/ditto-cot-all.jar (recommended for standalone use)
Documentation: java/build/docs/javadoc/
# Convert CoT XML file
java -jar build/libs/ditto-cot-all.jar convert input.xml output.json
# Show help
java -jar build/libs/ditto-cot-all.jar --help# Enable debug logging
RUST_LOG=debug cargo build
# Fast incremental builds
cargo check
# Watch for changes (requires cargo-watch)
cargo install cargo-watch
cargo watch -x check
# Profile build times
cargo build --timings# Continuous testing
./gradlew test --continuous
# Build without running tests
./gradlew assemble
# Parallel builds
./gradlew build --parallel
# Debug build issues
./gradlew build --infoBoth implementations generate code from schema/ditto.schema.json:
Rust: Automatic during cargo build via build.rs
Java: Automatic during Gradle build
Forcing Regeneration:
# Rust
cargo clean && cargo build
# Java
./gradlew clean build# Build integration test clients
make example-rust # Creates rust/target/debug/examples/integration_client
make example-java # Creates java/build/distributions/integration-client
# Run cross-language compatibility test
make test-integrationBoth implementations must produce identical output for the same input:
# Test schema compatibility
make test-integration
# Manual verification
make example-rust | jq '.ditto_document' > rust-output.json
make example-java | jq '.ditto_document' > java-output.json
diff rust-output.json java-output.jsonError: "failed to run custom build command for ditto_cot"
Solution: Ensure build dependencies are installed:
cargo clean
cargo build -vv # Verbose output for debuggingError: Schema generation failures Solution: Check JSON schema syntax:
# Validate schema
jq empty schema/ditto.schema.jsonError: "Unsupported class file major version" Solution: Verify JDK version:
java -version # Should be 17+
./gradlew --versionError: Gradle wrapper permissions Solution: Fix permissions:
chmod +x gradlewError: Test failures Solution: Check test configuration:
./gradlew test --info # Detailed test output# Use faster linker (Linux)
cargo install -f cargo-binutils
export RUSTFLAGS="-C link-arg=-fuse-ld=lld"
# Parallel compilation
export CARGO_BUILD_JOBS=4# Increase Gradle memory
export GRADLE_OPTS="-Xmx2g"
# Enable parallel builds
echo "org.gradle.parallel=true" >> gradle.propertiesComplete clean:
make clean
git clean -fdx # WARNING: Removes all untracked files
make allLanguage-specific clean:
# Rust
cargo clean
# Java
./gradlew cleanname: Build and Test
on: [push, pull_request]
jobs:
rust:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- run: make rust
- run: make test-rust
java:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- run: make java
- run: make test-java
integration:
needs: [rust, java]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: make all
- run: make test-integrationAfter successful builds:
- Run Tests: Follow the Testing Guide
- Integration: See Ditto SDK Integration
- Contributing: Review contribution guidelines
- Performance: Benchmark with the Performance Guide
- Getting Started - Initial setup and basic usage
- Testing Guide - Running tests and debugging build issues
- Troubleshooting - Common build problems and solutions
- Architecture - Understanding the multi-language build system
- Integration Examples - Using the built libraries in projects