我正在创建一个新项目(使用IntelliJ IDEA),该项目将使用:
我在设置Gradle以正确构建我的项目时遇到问题。我发现的大多数示例都是针对Groovy而非Kotlin DSL的,并且大多数仅涵盖了我想要的某些功能,但并非全部。
现在我有两个模块, core 和 lib ,其中 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()
}
}
core / 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"))
}
这样做,配置失败,并显示以下信息:
配置项目':core'时发生问题。
由于不存在额外的属性扩展而无法获取属性“ moduleName”
如果我删除inputs.property()
行,则配置成功,但是 core 编译失败( lib 成功编译):
任务:core:compileKotlin
e:在模块图中找不到模块myproject.lib
我认为问题出在我的根build.gradle.kts
上,但是我不知道如何使它起作用。到处搜寻,Kotlin DSL for Gradle有点新,没有得到广泛使用,而且文档也很稀缺。
任何建议将不胜感激!
答案 0 :(得分:0)
发布问题后,我自然找到了解决方案。有一个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文件夹中,否则插件将无法检测到该模块。