在Java 9模块路径和类路径之间拆分Gradle依赖项:自动模块

0xb*_*7ed 5 classpath gradle java-platform-module-system java-9 module-path

我遵循了Gradle指南来构建Java 9模块,从而使一个简单的基于Java 9的库项目成为现实。特别是,我按照指南中的建议手动设置了模块路径,如下所示:

ext.moduleName = 'com.foo.bar' 

compileJava {
    inputs.property("moduleName", moduleName)
    doFirst {
        options.compilerArgs = [
            '--module-path', classpath.asPath,
        ]
        classpath = files()  
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这只是获取我的整个类路径(由Gradle从我的依赖图中确定),并将其移到模块路径中。

除了一个简单的问题以外,一切工作都很好。我的某些依赖项(例如 org.jetbrains.kotlin:kotlin-stdlib-1.2.10)不是真正的Java 9模块,因为它们缺少module-info.class。它的优良坚持他们的类路径上模块路径,因为,现在java将它们转换成所谓的自动模块

问题就出现了,因为即使是一个自动模块,如果是我的模块的道路上,我需要参考它在requires指令中我的项目的模块。但是由于我-Xlint:all选择了Java编译器,因此会javac产生以下警告:

/path/to/myproject/foo-module/src/main/java/module-info.java:26: warning: requires directive for an automatic module
    requires kotlin.stdlib;
                   ^
Run Code Online (Sandbox Code Playgroud)

这个警告对我来说是站不住脚的,因为我也随该-Werror javac标志滚动,因此它使我的构建失败。

因此,似乎我需要将自动模块推送到我的类路径上,并仅在模块路径上保留“ true”模块依赖项...

是否有任何通用或半通用的方式(未与依赖项名称耦合)在编译器类路径及其模块路径之间拆分我的依赖项?