将 sourceDir 添加到 java sourceSet

Adding sourceDir to java sourceSet

根据 Gradle Kotlin 插件 page

Kotlin sources can be mixed with Java sources in the same folder, or in different folders. The default convention is using different folders. The corresponding sourceSets property should be updated if not using the default convention.

我想在 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)
}

什么给了?

TLDR

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

详情

当您在 build.gradle.kts 中调用 srcDirs 时,实际调用的方法是 SourceDirectorySet.getSrcDirs(). The implementation of this method in DefaultSourceDirectorySet.getSrcDirs() returns 集合的防御副本,这就是修改它的原因没有效果。

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