On Fri, Mar 22, 2019 at 11:37 AM Thibault Kruse <tibokr...@googlemail.com> wrote: > > While that is obviously true, the question is not as simple. The > groovy community must make a recommendation to all gradle projects in > the world about whether to use Gradle-Groovy-DSL or Gradle-Kotlin-DSL.
Answering myself, after having migrated a project of mine to Kotlin. My experience has been maybe similar to this article: https://proandroiddev.com/takeaways-from-migrating-a-complex-android-project-to-gradle-kotlin-dsl-eaeb5ccd8c84?gi=32fc005af2ba The experience of working with the Kotlin DSL is mixed. It makes a big difference which gradle and which IntelliJ version are used exactly, and in large projects where different people use different versions, and different plugins may require different versions, it is an additional pain to be bound to the latest version of everything (As an example best kotlin support requires gradle5, but the spotbugs plugin seems broken with gradle5). IntelliJ frequently marked half the kotlin files in red for being unable to resolve symbols, though restarting and such helped. Kotlin seems slower than Gradle (also mentioned in the article), and the migration path is not obvious when using 3rdparty plugins or custom code. The documentation about this is still meagre. And on the other hand, IDE support for Gradle-Groovy-DSL can be greatly improved by verbosely explictly using types. E.g. // bad pmd { toolVersion = '6.4.0' } // good import org.gradle.api.plugins.quality.PmdExtension pmd { PmdExtension pmdExt -> pmdExt.toolVersion = '6.4.0' } This may be uglier to write than the idiomatic Gradle, but can be a viable alternative to switching to Kotlin. And Gradle Inc. could promote this kind of syntax for Gradle-Groovy-DSL over the traditional minimal (with obfuscated typing) syntax. Gradle Inc. could also provide more Interfaces to use for such explicit typing, instead of providing static compilation. E.g project.sourceSets.main cannot be resolved in the IDE, but an interface could be provided such that javaProject(project).sourceSets.main would be supported in the IDE. IntelliJ provides full support for writing dynamically compiled Groovy when the types are explicitly provided. I also generally recommend using the buildSrc folder for managing shared build logic and constants (such as for dependencies) in multi-project builds. "apply from: <path/to/other/gradle/file>" on the other hand seems quite confusing, limited and does not scale well with complexity. So for Javaprojects using certain 3rd party (or in-house) plugins, staying with Groovy for the time being may be quite reasonable, also until APIs have matured and IDE and gradle support varies less between versions. For the Groovy project itself I am not sure how much better Kotlin would be than non-idiomatic explicitly typed Groovy-DSL.