簡體   English   中英

Gradle Kotlin DSL 多項目構建與 Java 模塊

[英]Gradle Kotlin DSL multi project build with Java Modules

我正在創建一個新項目(使用 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"))
}

庫/build.gradle.kts

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

plugins {
    kotlin("jvm")
}

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

這樣做,配置失敗:

配置項目“:core”時出現問題。

無法在額外的屬性擴展上獲取屬性“moduleName”,因為它不存在

如果我刪除inputs.property()行,則配置成功,但核心編譯失敗( lib編譯成功):

任務 :core:compileKotlin

e: 在模塊圖中找不到模塊 myproject.lib

我認為問題是我的根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 文件夾中,否則插件將無法檢測到模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM