build.gradle.kts 2.78 KB
plugins {
    alias(libs.plugins.kotlin.jvm)
    alias(libs.plugins.kotlin.spring)
    alias(libs.plugins.spring.dependency.management)
}

description = "vibe_erp plug-in host — PF4J integration, classloader isolation, lifecycle. INTERNAL."

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(21))
    }
}

kotlin {
    jvmToolchain(21)
    compilerOptions {
        freeCompilerArgs.add("-Xjsr305=strict")
    }
}

dependencies {
    api(project(":api:api-v1"))
    implementation(libs.kotlin.stdlib)
    implementation(libs.kotlin.reflect)
    implementation(libs.jackson.module.kotlin)
    implementation(project(":platform:platform-events")) // for the real EventBus injected into PluginContext
    implementation(project(":platform:platform-metadata")) // for per-plug-in MetadataLoader.load(...)
    implementation(project(":platform:platform-i18n")) // for per-plug-in IcuTranslator + shared LocaleProvider
    implementation(project(":platform:platform-security")) // for PermissionEvaluator refresh wiring
    implementation(project(":platform:platform-workflow")) // for per-plug-in TaskHandler registration
    implementation(project(":platform:platform-jobs"))     // for per-plug-in JobHandler registration
    // Note: platform-files and platform-reports are NOT needed here
    // because DefaultPluginContext accepts api.v1 FileStorage +
    // ReportRenderer interfaces (both in api-v1), and the concrete
    // beans are wired by Spring at distribution boot. Adding them
    // as dependencies would work too but would unnecessarily couple
    // platform-plugins to two more modules.

    implementation(libs.spring.boot.starter)
    implementation(libs.spring.boot.starter.web) // for @RestController on the dispatcher
    implementation(libs.spring.boot.starter.data.jpa) // for DataSource + JdbcTemplate + TransactionTemplate
    implementation(libs.liquibase.core) // for plug-in-owned Liquibase changelogs
    implementation(libs.asm) // for plug-in linter bytecode scan
    implementation(libs.pf4j)
    implementation(libs.pf4j.spring)
    // compileOnly: `PluginEndpointsOpenApiCustomizer` implements
    // `org.springdoc.core.customizers.OpenApiCustomizer`, but we don't
    // want platform-plugins to drag the full springdoc-openapi-starter-webmvc-ui
    // bundle into its runtime classpath — that bundle is already present
    // at runtime via platform-bootstrap's `implementation` declaration
    // (which distribution inherits). compileOnly gives us the types at
    // compile time without the duplicate runtime jar.
    compileOnly(libs.springdoc.openapi.starter.webmvc.ui)

    testImplementation(libs.spring.boot.starter.test)
    testImplementation(libs.junit.jupiter)
    testImplementation(libs.assertk)
    testImplementation(libs.mockk)
}

tasks.test {
    useJUnitPlatform()
}