如何使用Quarkus设置多模块gradle项目?

时间:2020-11-06 03:50:22

标签: gradle quarkus

在其build.gradle.kts步骤中使用:quarkusBuild,在根NoSuchElementException中应用了Quarkus插件的多模块gradle项目失败:

> Task :quarkusBuild FAILED
building quarkus jar

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':quarkusBuild'.
> java.util.NoSuchElementException

build.gradle.kts如下:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.3.72"
    id("io.quarkus") version "1.9.1.Final"
}

group = "org.example"
version = "1.0-SNAPSHOT"

allprojects {
    repositories {
        mavenCentral()
    }
}

subprojects {
    
    apply {
        plugin("kotlin")
    }

    dependencies {
        implementation(kotlin("stdlib"))
    }
}

但是,将行id("io.quarkus") version "1.9.1.Final"移到子项目的build.gradle.kts上,构建成功。似乎quarkus构建步骤在声明插件的位置而不是实际应用的位置运行。

理想情况下,我想在根目录中一次声明该插件,然后将其仅应用于子项目,而不是针对根项目执行该插件,因为那里显然没有什么要构建的。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要添加apply false

plugins {
    kotlin("jvm") version "1.3.72" apply false
    id("io.quarkus") version "1.9.1.Final" apply false
}

https://docs.gradle.org/current/userguide/plugins.html#sec:subprojects_plugins_dsl

您的构建还假设每个子模块都是Kotlin模块,这可能是正确的,也可能不是。您可以执行以下操作,将特定配置应用于特定任务:

subprojects { subproject ->
    subproject.tasks.withType(JavaCompile).configureEach {
        sourceCompatibility = JavaVersion.VERSION_11
    }
    subproject.tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions {
            jvmTarget = JavaVersion.VERSION_11
        }
    }
}