O Kotlin 1.2.10 e o Java 9 têm regras opostas em relação aos módulos automáticos?

Eu tenho um projeto Gradle usando o plugin Kotlin Gradle. Eu quero construir um módulo Java 9, para que minha estrutura de diretórios fique assim:

src/main/java/
    - module-info.java
src/main/kotlin/
    - Foo.kt
    - Bar.kt
build.gradle
...

Minhasbuild.gradle declara as seguintes dependências:

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10"
    compile "org.jetbrains.kotlin:kotlin-reflect:1.2.10"
    compile "org.junit.jupiter:junit-jupiter-api:5.0.2"
}

e uso todas essas dependências na minha fonte Kotlin (Foo.kt, Bar.kt, ...).

Tudo funciona muito bem se eu escrever o meumodule-info.java igual a:

module my.module {
    requires kotlin.stdlib;
    exports my.module.pkg;
}

e se eu fornecer todas as minhas dependências em tempo de compilação parajavac durante ocompileJava tarefa usandoessa técnica.

Contudo se eu ligar-Xlint:all para o compilador Java durante ocompileJava tarefa (compilarmodule-info.java), Recebo os seguintes avisos:

/path/to/my.module/src/main/java/module-info.java:26: warning: requires directive for an automatic module
    requires kotlin.stdlib;
                   ^

Então aqui temos o compilador Java,javac reclamando quekotlin.stdlib é um módulo automático, então eu não deveria ter umrequires cláusula para isso.

Mas se eu excluir orequires cláusula para fazerjavac feliz fazkotlinc ainda mais irritado do quejavac foi (recebo um erro, não um aviso):

e: /path/to/my.module/src/main/java/module-info.java: The Kotlin standard library is not found in the module graph. Please ensure you have the 'requires kotlin.stdlib' clause in your module definition

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':my.module:compileKotlin'.

Agora também posso consertar isso editando meucompileKotlin tarefa assim:

compileKotlin {
    doFirst {
        kotlinOptions.freeCompilerArgs = ['-Xallow-kotlin-package']
    }
}

Mas isso só leva a mais erros durante ocompileKotlin tarefa, todos parecidos com este:

e: /path/to/my.module/src/main/kotlin/Foo.kt: (27, 30): Symbol is declared in module 'org.junit.jupiter.api' which current module does not depend on

E então, se eu tentar forçarcompileKotlin para seguir um caminho de módulo em vez de um caminho de classe adicionando"-Xmodule-path=${classpath.asPath}" parafreeCompilerArgs e configuraçãoclasspath para ficar vazio, o compilador Kotlin não consegue encontrar nada, e acabo com zilhões de erros de referência não resolvidos!

Por que o compilador Kotlin está me dizendo que eu tenho que terrequires kotlin.stdlib; quando o compilador Java diz o contrário? Como posso fazer com que Kotlin e Java trabalhem juntos para produzir um módulo Java 9?

questionAnswers(2)

yourAnswerToTheQuestion