Добавление sourceDir в java sourceSet

Согласно странице подключаемого модуля Gradle Kotlin.

Исходники Kotlin можно смешивать с исходниками Java в одной папке или в разных папках. По соглашению по умолчанию используются разные папки. Соответствующее свойство sourceSets следует обновить, если не используется соглашение по умолчанию.

Я хочу добавить несколько файлов Java в src/main/kotlin и выполнить их компиляцию с помощью задачи 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)
}

Что дает?


person Rahul Khimasia    schedule 06.05.2018    source источник


Ответы (1)


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

person sa1nt    schedule 29.05.2018
comment
Спасибо. Редактор и плагин eclipse kotlin не завершены и содержат ошибки. Они не предоставляют подсказок по завершению кода. Я прекратил использовать eclipse и теперь переключился на IntelliJ Idea, который позволяет мне увидеть внутренности API-интерфейса реализации Gradle-Kotlin-DSL, чтобы я мог обнаружить доступные мне вызовы API. Отсутствие надлежащей документации расстраивало, но теперь, надеюсь, это не будет большим ограничением. - person Rahul Khimasia; 29.05.2018
comment
Нет проблем :) Я начал изучать Gradle и Kotlin совсем недавно, и для меня попытка ответить на ТАК вопросы — это способ учиться. - person sa1nt; 29.05.2018
comment
Раньше я думал об изучении Groovy, так как неосознанно использовал его для программирования Gradle DSL. Но теперь, когда Gradle поддерживает Kotlin для программирования DSL. Я серьезно подумываю отказаться от Groovy и вместо этого изучить Kotlin. Я начну с изучения справочного руководства по Kotlin. - person Rahul Khimasia; 30.05.2018