我按照关于构建 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:all
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
旗子滚动,所以它使我的构建失败。
所以似乎我需要将自动模块推送到我的类路径中,并且只在模块路径上保留“真正的”模块依赖关系......
是否有任何通用或半通用方式(即不与依赖项名称耦合)在编译器类路径及其模块路径之间拆分我的依赖项?