1

根据 Gradle Kotlin 插件页面

Kotlin 源代码可以与 Java 源代码混合在同一个文件夹或不同文件夹中。默认约定是使用不同的文件夹。如果不使用默认约定,则应更新相应的 sourceSets 属性。

我想在 src/main/kotlin 中添加一些 Java 文件并让 compileJava 任务编译它们。我试图想出以下块来实现它,但没有骰子。

java {
    val kotlinSrcDir: File = File(projectDir, "src/main/kotlin")
    sourceSets["main"].java.srcDirs.add(kotlinSrcDir)
    val javasrcdirs: Set<File> = sourceSets["main"].java.srcDirs
    println(javasrcdirs)
}

是什么赋予了?

4

1 回答 1

6

TLDR

java {
    val kotlinSrcDir = "src/main/kotlin"
    val mainJavaSourceSet: SourceDirectorySet = sourceSets.getByName("main").java
    mainJavaSourceSet.srcDir(kotlinSrcDir)
    println(mainJavaSourceSet.srcDirs)
}

细节

当您调用srcDirs您的时build.gradle.kts,调用的实际方法是SourceDirectorySet.getSrcDirs(). 此方法的实现DefaultSourceDirectorySet.getSrcDirs()返回集合的防御性副本,这就是修改它没有效果的原因。

因此,要实际将新的源目录添加到集合中,请使用srcDir(Object)srcDirs(Object...).

于 2018-05-29T09:55:40.163 回答