将sourceDir添加到java sourceSet

时间:2018-05-06 21:35:22

标签: gradle-kotlin-dsl

根据Gradle Kotlin插件page

  

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)
}

是什么给出的?

1 个答案:

答案 0 :(得分:4)

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...)