6

我按照关于构建 Java 9 模块的 Gradle 指南开始了一个简单的基于 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它们转换为所谓的自动模块

出现问题是因为即使是自动模块,如果它在我的模块路径上,我需要在的项目模块的requires指令中引用它。但是因为我选择了 Java 编译器,所以会生成以下警告:-Xlint:alljavac

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

这个警告对我来说是站不住脚的,因为我也跟着-Werror javac旗子滚动,所以它使我的构建失败。

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

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

4

0 回答 0