拆分Java 9模块路径和类路径之间的Gradle依赖关系:自动模块

时间:2017-12-23 21:08:43

标签: gradle classpath java-9 jigsaw module-path

我跟着Gradle guide on building Java 9 modules开始了一个简单的基于Java 9的库项目。特别是我按照指南中的建议手动设置模块路径,如下所示:

ext.moduleName = 'com.foo.bar' 

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

观察这只是我的整个类路径,由Gradle从我的依赖图中确定,并将其移到模块路径上。

除了一个简单的问题外,一切都很有效。我的一些依赖项(例如 org.jetbrains.kotlin:kotlin-stdlib-1.2.10)不是真正的Java 9模块,因为它们缺少module-info.class。可以将它们粘贴在类路径模块路径上,因为,现在java会将它们转换为所谓的automatic modules

问题出现了,因为即使对于自动模块,如果它在我的模块路径上,我需要在我的项目模块中的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;
                   ^

这个警告对我来说是站不住脚的,因为我还使用了-Werror javac标志,因此它使我的构建失败。

所以我似乎需要将自动模块推送到我的类路径中,并且只在模块路径上保持“真正的”模块依赖...

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

0 个答案:

没有答案