Skip to content

Build System And Tooling

Radch-enko edited this page Jul 24, 2025 · 2 revisions

Build System & Tooling

This document covers the Gradle-based build system configuration, multiplatform setup, and development tooling for the Effective Office project. It focuses on the build configuration, plugin management, dependency resolution, and platform-specific build targets.

For information about project structure and module organization, see Project Structure. For deployment configuration, see Docker Deployment.

Overview

The Effective Office project uses Gradle as its primary build system with Kotlin DSL configuration. The build system supports multiple targets including a Spring Boot backend, Android tablet application, and iOS framework generation through Kotlin Multiplatform technology.

Build System Architecture

build-system-architecture.svg

Gradle Configuration Structure

The project follows a hierarchical Gradle configuration with centralized dependency management and build logic separation.

Root Project Configuration

The root build.gradle.kts establishes project-wide settings and plugin management:

Configuration Area Details
Plugin Management Applies multiplatform, compose, and Android plugins to subprojects
Repository Configuration Configures Maven Central, Google, and Compose repositories
Java/Kotlin Compatibility Sets Java 17 as target with UTF-8 encoding
Dependency Resolution Forces specific versions for security (commons-compress)

The build script includes global dependency resolution strategies and compiler configurations.

Build Logic Module

The build-logic module contains custom Gradle plugins and shared build configuration:

build-logic-module.svg

Multiplatform Configuration

The tablet client uses Kotlin Multiplatform to target both Android and iOS platforms from shared code.

Platform Targets

platform-targets.svg

The multiplatform configuration includes specific iOS framework settings:

  • Static framework generation with isStatic = true
  • Export of key dependencies (decompose, calf-ui, essenty-lifecycle)
  • Compiler flag to disable Decompose parcelize for iOS compatibility

Plugin Configuration

The project uses multiple Gradle plugins for different aspects of the build process.

Core Plugins

Plugin Version Purpose
kotlin-multiplatform 2.1.21 Enables cross-platform Kotlin compilation
kotlin-plugin-compose 2.1.21 Compose compiler integration
jetbrains-compose 1.8.1 Compose Multiplatform framework
android-application 8.9.1 Android app build support
kotlin-serialization 2.1.21 JSON serialization support
buildkonfig - Build-time configuration generation
google-services 4.4.3 Firebase integration

Plugin Application Flow

plugins-application-flow.svg

Android Build Configuration

The Android-specific build configuration includes signing, build types, and application metadata.

Application Configuration

application-configuration.svg

The Android configuration includes environment-based signing for release builds:

  • OFFICE_ELEVATOR_RELEASE_ALIAS
  • OFFICE_ELEVATOR_RELEASE_KEY_PASSWORD
  • OFFICE_ELEVATOR_RELEASE_STORE_PASSWORD

Dependency Management

The project uses a modular dependency structure with clear separation between platform-specific and shared dependencies.

Dependency Categories

dependency-categories.svg

Module Dependencies

The composeApp module depends on multiple local modules:

Module Type Modules Purpose
Core Modules core:ui, core:data, core:domain Shared infrastructure
Feature Modules feature:main, feature:settings, feature:bookingEditor, feature:fastBooking, feature:slot Application features

Build Configuration Generation

The project uses BuildKonfig to generate build-time configuration constants.

BuildKonfig Configuration

buildkonfig-configuration.svg

The BuildKonfig plugin reads from gradle.properties and generates compile-time constants:

  • apiUrlRelease for production API endpoint
  • apiUrlDebug for development API endpoint
  • apiKey for API authentication

Development Tooling

The build system includes several development tools and configurations to support the development workflow.

Compiler Configuration

Setting Value Purpose
Java Version VERSION_17 Source and target compatibility
Kotlin JSR305 strict Null safety annotations
Encoding UTF-8 Character encoding for source files
Test Framework JUnit Platform Unit testing support

IDE Integration

The project includes specific IDE configurations:

  • Android Manifest with development permissions
  • Compose UI tooling for preview support
  • Resource packaging exclusions
Clone this wiki locally