gpt4 book ai didi

使用 Java 模块构建 Gradle Kotlin DSL 多项目

转载 作者:行者123 更新时间:2023-12-02 12:57:47 27 4
gpt4 key购买 nike

我正在创建一个新项目(使用 IntelliJ IDEA),它将使用:

  • Gradle 作为构建系统
  • 用于构建脚本的 Kotlin DSL
  • 用于“组织”的 Java 9 模块
  • Kotlin 是主要语言

我在设置 Gradle 以正确构建我的项目时遇到问题。我发现的大多数示例都是针对 Groovy 而不是 Kotlin DSL,并且大多数只涵盖了我想要的一些功能,但不是全部。

现在我有两个模块,corelib,其中 core 模块需要 lib 模块.我的 gradle 构建脚本是:

build.gradle.kts

plugins {
base
kotlin("jvm") version "1.3.41" apply false
}

subprojects {
afterEvaluate {
tasks.withType<JavaCompile> {
inputs.property("moduleName", extra["moduleName"])
options.compilerArgs.addAll(arrayOf("--module-path", classpath.asPath))
classpath = files()
}
}

repositories {
mavenCentral()
jcenter()
}
}

核心/build.gradle.kts

extra.set("moduleName", "myproject.core")

plugins {
kotlin("jvm")
}

dependencies {
compile(kotlin("stdlib"))
compile(project(":networking"))
}

lib/build.gradle.kts

extra.set("moduleName", "myproject.lib")

plugins {
kotlin("jvm")
}

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

这样做,配置失败:

A problem occurred configuring project ':core'.

Cannot get property 'moduleName' on extra properties extension as it does not exist

如果我删除 inputs.property() 行配置成功,但 core 编译失败(lib 编译成功):

Task :core:compileKotlin

e: Module myproject.lib cannot be found in the module graph

我认为问题出在我的根 build.gradle.kts 上,但我不知道如何让它工作。谷歌搜索,Gradle 的 Kotlin DSL 有点新,使用不广泛,而且文档非常稀缺。

如有任何建议,我们将不胜感激!

最佳答案

自然地,在发布问题后我找到了解决方案。有一个 Gradle 插件可以完全满足这种情况下的需要,其中有一个 KotlinDSL 示例:https://github.com/java9-modularity/gradle-modules-plugin/tree/master/test-project-kotlin

使用插件,我需要做的就是更改根 build.gradle.kts 文件:

plugins {
base
kotlin("jvm") version "1.3.41" apply false
id("org.javamodularity.moduleplugin") version "1.5.0" apply false
}

subprojects {
apply(plugin = "org.javamodularity.moduleplugin")

repositories {
mavenCentral()
jcenter()
}
}

注意:确保您的 module-info.java 文件在 java src 文件夹中,而不是在 kotlin src 文件夹中,否则插件不会检测模块。

关于使用 Java 模块构建 Gradle Kotlin DSL 多项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57479632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com