首页 > 解决方案 > 如何在 Kotlin Gradle 多模块项目中为 Spring Boot 应用程序配置“mainClassName”?

问题描述

在 Kotlin 中有一个 Gradle 多模块项目,在某些模块中使用 Spring Boot。

我在项目的根目录中使用'org.springframework.boot'and'io.spring.dependency-management'插件build.gradle,除了其他东西之外,它还提供了bootRun任务。

AFAIK 我需要mainClassName像这样配置(或入口点):

springBoot {
    mainClassName = 'de.shinythings.hexagon.HexagonApplicationKt'
}

虽然这适用于包含实际 Spring Boot 应用程序的子项目,但它不适用于根项目。

我希望能够在根项目中配置它,因为我希望能够使用./gradlew bootRun而不是./gradlew configuration:bootRun.

其他任务喜欢./gradlew build./gradlew test工作正常。

这是根项目的build.gradle链接):

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.4.10'
    id 'org.springframework.boot' version '2.3.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation project(':configuration')
}

springBoot {
    mainClassName = 'de.shinythings.hexagon.HexagonApplicationKt'
}

subprojects {
    group = 'de.shinythings.hexagon'
    version = '0.0.1-SNAPSHOT'

    repositories {
        mavenCentral()
    }

    ext {
        mockKVersion = '1.10.2'
    }

    apply plugin: 'org.jetbrains.kotlin.jvm'
    apply plugin: 'io.spring.dependency-management'

    dependencies {
        implementation("org.jetbrains.kotlin:kotlin-reflect")
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    }

    dependencyManagement {
        imports {
            mavenBom('org.springframework.boot:spring-boot-dependencies:2.3.4.RELEASE')
        }
    }

    compileKotlin {
        kotlinOptions {
            jvmTarget = JavaVersion.VERSION_1_8
            freeCompilerArgs = ["-Xjsr305=strict"]
            allWarningsAsErrors = true
        }
    }

    compileTestKotlin {
        kotlinOptions {
            jvmTarget = JavaVersion.VERSION_1_8
            freeCompilerArgs = ["-Xjsr305=strict"]
            allWarningsAsErrors = true
        }
    }
}

在子项目/模块中,此设置有效(链接):

plugins {
    id 'org.springframework.boot'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.4.10'
}

dependencies {
    implementation project(':common')
    implementation project(':application')
    implementation project(':adapters:persistence')
    implementation project(':adapters:web')

    implementation 'org.springframework.boot:spring-boot-starter'

    implementation('com.h2database:h2')
}

springBoot {
    mainClassName = 'de.shinythings.hexagon.HexagonApplicationKt'
}

我需要做什么来配置mainClassName是根的项目build.gradle

标签: spring-bootkotlingradle

解决方案


推荐阅读