为什么Java自动模块不包含导出节

问题描述 投票:3回答:1

通过简单地将常规jar放置在automatic module而非上,可以将常规jar转换为modulepath。自动模块具有以下属性:

自动模块是隐式定义的命名模块,因为它没有模块声明。每个包装中的因此,即使自动模块也被视为已导出实际上可能只供内部使用。

因此,自动模块内的所有软件包均可用。但是,如果我们使用classpath指令检查自动模块,则输出中没有--describe-module部分。

例如自动模块exports

main

如果将包jar --file main.jar --describe-module com.foo jar:file:///.../code/module/main.jar/!module-info.class requires java.base mandated contains com.foo 仍视为已导出,为什么没有exports节?我发现这有点令人困惑:com.foo提示存在无导出包,但是同时,--describe-module是一个自动模块,因此所有内容都导出到隐式

java java-9 java-module jigsaw
1个回答
3
投票

[我相信,main工具中的命令行选项--describe-module只是用来描述jar文件的内容,如果它是一个显式模块,则完整的描述符将与自动模块共享,仅显示名称。] >

从命令jar引用

打印模块描述符,

自动模块名称

另一方面,如果您为给出了jar文件的自动模块进行jar --help,则可以注意到,此类声明的导出实际上存在于模块声明中。例如说:

try using jdeps for generating module-info.java

[将以下内容写入jdeps

module-info.java
© www.soinside.com 2019 - 2024. All rights reserved.