gradle KotlinDSL:如何使用typesafe API配置子项目

ccrfmcuu  于 2023-05-29  发布在  Kotlin
关注(0)|答案(2)|浏览(201)

Gradle 6.1.1
我一直在尝试使用KotlinDSL以类型安全的方式转换项目的Gradle文件,但到目前为止失败了。我所有的项目都是Java中的多项目构建。这个想法是分解/删除子模块的公共配置(无论是在根模块的'subprojects'块中还是在单独的'kts'文件中,我不在乎)。官方文档指出,不可能使用类型安全的“子项目”和apply(from = 'shared.gradle. kts')(https://docs.gradle.org/current/userguide/kotlin_dsl.html)。
它的工作原理如下,但它是相当anoying:

plugins {
    idea
    eclipse
}

subprojects {
    apply(plugin = "java")

    dependencies {
       "implementation"("com.google.guava:guava:28.1-jre")
       //...
    }
}

是否有一种方法可以以类型安全的方式分解所有子模块的模块配置?如果不是……gradle计划允许吗?

bvjveswy

bvjveswy1#

Gradle 6.1.1类型安全模型访问器读取:
只有主项目构建脚本和预编译的项目脚本插件具有类型安全的模型访问器。初始化脚本、设置脚本、脚本插件则不需要。* 这些限制将在未来的Gradle版本中删除
无论“未来版本”是什么意思......当交叉配置项目时:
跨项目配置是一种机制,通过它可以从另一个项目的生成脚本配置一个项目。一个常见的示例是在根项目生成脚本中配置子项目。
采用这种方法意味着您将无法对插件提供的模型元素使用类型安全访问器 *。您将不得不依赖字符串字面量和标准Gradle API。

gab6jxml

gab6jxml2#

对我很有效

plugins {
    java // just simply add java plugin to the root plugins section
    idea
    eclipse
}

subprojects {
    apply(plugin = "java")

    dependencies {
       implementation("com.google.guava:guava:28.1-jre")
    }
}

在这种情况下,java插件将应用于根项目,该项目将在根中创建build文件夹。要避免创建build文件夹,您需要禁用根项目的buildjar任务:

tasks {
    jar {
        isEnabled = false
    }
    build {
        isEnabled = false
    }
}

参见gradle: disable creation of the build folder at root in multi-projects application

相关问题