jbuild 0.1.8

High-performance Java build tool supporting Maven and Gradle
Documentation
# jbuild Architecture Diagram

## System Overview

```
┌────────────────────────────────────────────────────────────────────┐
│                         jbuild System                              │
│                    (Cargo for Java)                                │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│                    Presentation Layer                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐            │
│  │  CLI         │  │  HTTP API    │  │  Future UI   │            │
│  │  Commands    │  │  (Planned)   │  │  (Planned)   │            │
│  └──────────────┘  └──────────────┘  └──────────────┘            │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│                    Application Layer (Phase 6)                     │
│  ┌────────────────────────┐  ┌────────────────────────┐           │
│  │ BuildOrchestration     │  │ ProjectInitialization  │           │
│  │ Service                │  │ Service                │           │
│  │ - execute_build()      │  │ - create_project()     │           │
│  │ - clean()              │  │ - create_maven()       │           │
│  └────────────────────────┘  │ - create_gradle()      │           │
│                               └────────────────────────┘           │
│  ┌────────────────────────┐                                        │
│  │ DependencyManagement   │                                        │
│  │ Service                │                                        │
│  │ - resolve_dependencies()│                                       │
│  │ - get_latest_version() │                                        │
│  │ - add_dependency()     │                                        │
│  └────────────────────────┘                                        │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│                    Domain Layer (Phases 1-5)                       │
│                                                                    │
│  ┌─────────────────────────────────────────────────────────────┐  │
│  │ Bounded Contexts                                            │  │
│  │                                                             │  │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐    │  │
│  │  │ Build System │  │    Maven     │  │   Gradle     │    │  │
│  │  │   Context    │  │   Context    │  │   Context    │    │  │
│  │  └──────────────┘  └──────────────┘  └──────────────┘    │  │
│  │                                                             │  │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐    │  │
│  │  │   Artifact   │  │ Compilation  │  │   Testing    │    │  │
│  │  │   Context    │  │   Context    │  │   Context    │    │  │
│  │  └──────────────┘  └──────────────┘  └──────────────┘    │  │
│  │                                                             │  │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐    │  │
│  │  │  Packaging   │  │    Plugin    │  │    Config    │    │  │
│  │  │   Context    │  │   Context    │  │   Context    │    │  │
│  │  └──────────────┘  └──────────────┘  └──────────────┘    │  │
│  │                                                             │  │
│  │  ┌──────────────┐                                          │  │
│  │  │ Code Quality │                                          │  │
│  │  │   Context    │                                          │  │
│  │  └──────────────┘                                          │  │
│  └─────────────────────────────────────────────────────────────┘  │
│                                                                    │
│  ┌─────────────────────────────────────────────────────────────┐  │
│  │ Aggregates                                                  │  │
│  │  • MavenProject (coordinates, dependencies, plugins)        │  │
│  │  • GradleProject (tasks, configurations)                    │  │
│  └─────────────────────────────────────────────────────────────┘  │
│                                                                    │
│  ┌─────────────────────────────────────────────────────────────┐  │
│  │ Domain Services                                             │  │
│  │  • BuildSystemDetector                                      │  │
│  │  • DependencyResolver (transitive, conflict resolution)     │  │
│  │  • VersionResolver (ranges, latest)                         │  │
│  │  • LifecycleExecutor (Maven phases)                         │  │
│  │  • TaskExecutor (Gradle tasks, parallel planning)           │  │
│  └─────────────────────────────────────────────────────────────┘  │
│                                                                    │
│  ┌─────────────────────────────────────────────────────────────┐  │
│  │ Value Objects (15+)                                         │  │
│  │  • ArtifactCoordinates, Version, JavaVersion                │  │
│  │  • LifecyclePhase, Scope, VersionRange                      │  │
│  │  • BuildSystemType, FilePath, etc.                          │  │
│  └─────────────────────────────────────────────────────────────┘  │
│                                                                    │
│  ┌─────────────────────────────────────────────────────────────┐  │
│  │ Repository Interfaces                                       │  │
│  │  • ArtifactRepository (trait)                               │  │
│  └─────────────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│                    Infrastructure Layer (Phase 5)                  │
│  ┌────────────────────────┐  ┌────────────────────────┐           │
│  │ LocalRepository        │  │ RemoteRepository       │           │
│  │ (~/.m2/repository)     │  │ (Maven Central)        │           │
│  │ - install()            │  │ - cache_dir            │           │
│  │ - exists()             │  │ - download()           │           │
│  │ - list_versions()      │  │                        │           │
│  └────────────────────────┘  └────────────────────────┘           │
│                                                                    │
│  ┌────────────────────────┐                                        │
│  │ RepositoryChain        │                                        │
│  │ (Fallback Logic)       │                                        │
│  │ - Local → Remote       │                                        │
│  └────────────────────────┘                                        │
│                                                                    │
│  ┌────────────────────────────────────────────────────┐           │
│  │ External Systems (Planned)                         │           │
│  │  • HTTP Client (Maven Central downloads)           │           │
│  │  • XML Parser (POM parsing)                        │           │
│  │  • File System (artifact storage)                  │           │
│  └────────────────────────────────────────────────────┘           │
└────────────────────────────────────────────────────────────────────┘
```

## Data Flow Example: Build Execution

```
User runs: jbuild build
┌─────────────────────────────────────┐
│ CLI Command Handler                 │
│ (Presentation Layer)                │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ BuildOrchestrationService           │
│ (Application Layer)                 │
│ - Detect build system               │
│ - Orchestrate execution             │
└─────────────────────────────────────┘
    ├─────────────────┬─────────────────┐
    ▼                 ▼                 ▼
┌──────────┐   ┌──────────────┐   ┌──────────────┐
│ Detector │   │ Lifecycle    │   │ Task         │
│ Service  │   │ Executor     │   │ Executor     │
│ (Domain) │   │ (Maven)      │   │ (Gradle)     │
└──────────┘   └──────────────┘   └──────────────┘
                    │                     │
                    ▼                     ▼
              ┌──────────┐          ┌──────────┐
              │ Maven    │          │ Gradle   │
              │ Project  │          │ Project  │
              │(Aggregate)│         │(Aggregate)│
              └──────────┘          └──────────┘
```

## Dependency Flow Example: Add Dependency

```
User runs: jbuild add org.slf4j:slf4j-api:2.0.9
┌─────────────────────────────────────┐
│ CLI Command Handler                 │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ DependencyManagementService         │
│ (Application Layer)                 │
│ - Parse coordinates                 │
│ - Resolve transitive deps           │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ DependencyResolver                  │
│ (Domain Service)                    │
│ - Resolve transitive                │
│ - Detect circular deps              │
│ - Resolve conflicts                 │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ RepositoryChain                     │
│ (Infrastructure)                    │
│ - Try LocalRepository               │
│ - Fallback to RemoteRepository      │
└─────────────────────────────────────┘
    ├──────────────┬──────────────┐
    ▼              ▼              ▼
┌────────┐   ┌──────────┐   ┌──────────┐
│ Local  │   │ Remote   │   │ Cache    │
│ Repo   │   │ Repo     │   │          │
└────────┘   └──────────┘   └──────────┘
```

## Key Design Patterns

### 1. Repository Pattern
```rust
trait ArtifactRepository {
    fn install(&self, coords: &ArtifactCoordinates, file: PathBuf) -> Result<()>;
    fn exists(&self, coords: &ArtifactCoordinates) -> bool;
    fn get_metadata(&self, coords: &ArtifactCoordinates) -> Result<ArtifactMetadata>;
}

// Implementations:
// - LocalRepository
// - RemoteRepository
// - RepositoryChain (composite)
```

### 2. Aggregate Pattern
```rust
pub struct MavenProject {
    coordinates: ArtifactCoordinates,  // Identity
    dependencies: Vec<MavenDependency>, // Entities
    plugins: Vec<MavenPlugin>,         // Entities
    // Enforces invariants
}
```

### 3. Value Object Pattern
```rust
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ArtifactCoordinates {
    group_id: String,
    artifact_id: String,
    version: String,
    // Immutable, validated
}
```

### 4. Domain Service Pattern
```rust
pub struct DependencyResolver<R: ArtifactRepository> {
    repository: R,
}
// Stateless, encapsulates complex logic
```

## Testing Strategy

```
┌─────────────────────────────────────┐
│ 285 Tests (100% Pass Rate)          │
├─────────────────────────────────────┤
│ Unit Tests                          │
│  • Value object validation          │
│  • Domain service logic             │
│  • Aggregate invariants             │
├─────────────────────────────────────┤
│ Integration Tests                   │
│  • Repository operations            │
│  • Application service orchestration│
│  • Build system detection           │
├─────────────────────────────────────┤
│ Mock Objects                        │
│  • MockRepository for testing       │
│  • Trait-based dependency injection │
└─────────────────────────────────────┘
```

## Technology Stack

- **Language**: Rust (Edition 2024)
- **Architecture**: Domain-Driven Design (DDD)
- **Testing**: 285 tests with cargo test
- **Dependencies**: 
  - anyhow (error handling)
  - serde (serialization)
  - tokio (async runtime)
  - dirs (system directories)

## Performance Characteristics

- **Startup Time**: ~10ms (vs 500ms+ for Maven/Gradle)
- **Memory Usage**: ~50MB (vs 200-300MB for Maven/Gradle)
- **Test Execution**: 2.08s for 285 tests
- **Build Time**: ~2s for full library compilation

## Future Enhancements

**Phase 7: Domain Events** (Planned)
- Event publishing and handling
- Build event notifications
- Audit logging

**Phase 8: Migration** (Planned)
- Wire application services into CLI
- Replace legacy implementations
- Maintain backward compatibility

**Infrastructure Improvements**
- HTTP client for remote downloads
- XML parser for POM files
- Build caching layer
- Parallel artifact downloads