在stackoverflow上多次提到自动模块,但我找不到自动模块的完整,简洁和自给自足的定义.
那么,什么是自动模块?它是否导出所有包裹?它打开所有包裹吗?它是否读取所有其他模块?
将Maven项目升级到Java 9并添加模块描述符后,javac抱怨自动模块的传递依赖:
[警告] /.../scrc/main/java/module-info.java:[3,35]
requires transitive自动模块指令
module-info.java重现问题的一个例子:
module com.example.mymodule {
exports com.example.mymodule.myexportedpackage;
requires transitive com.google.common;
}
Run Code Online (Sandbox Code Playgroud)
这个警告的含义是完全清楚的,这里有一些相关的链接:
问题是 - 如何在不修复实际问题的情况下抑制此警告,并且不禁用所有其他javac警告?
我尝试了以下选项,但它们都没有奏效:
@SuppressWarnings("module") 在 module-info.java@SuppressWarnings("all") 在 module-info.java-Xlint:all,-module 命令行选项不幸的是,我无法修复实际问题(现在),因为"my"模块具有来自第三方(自动)模块(例如Guava)的返回类型和注释.因此,如果我使用"require com.google.common"(不带transitive),则会有不同的警告,例如:
[WARNING] .../MyClass.java:[25,20]
com.google.common.collect.Table模块中的类com.google.common不是间接导出的requires transitive
当然,我无法为第三方库定义模块描述符(现在是自动模块).
我正在使用-Werror我想保留的,所以警告不仅仅是烦人的......
PS我不打算将我的工件发布到任何公共存储库.