默认情况下,哪些系统模块在模块路径上?

时间:2017-05-18 14:56:11

标签: java java-9 jigsaw module-path

当我通过java -cp(没有--add-modules--limit-modules)运行应用程序时,某些Java系统模块是可观察的,而其他的则不是。

例如,所有java.se模块都是可观察的。所有java.se.ee模块都不可观察。我知道javafx.*模块是可观察的。 <{1}}和jdk.unsupported也是可观察的。

那么,我的假设是否正确:如果未指定jdk.shell--add-modules,则可观察系统模块集包含除--limit-modules以外的所有系统模块?

是否有可靠的方法来了解默认可观察系统模块的确切列表?我知道有一个java.se.ee选项,但它列出了所有模块,包括--list-modules

1 个答案:

答案 0 :(得分:7)

  

所以,我的假设是正确的:如果没有指定--add-modules和--limit-modules,那么可观察的系统模块集包含除java.se.ee之外的所有系统模块?

简而言之,是的,这是正确的。

Java 9中启用的默认模块集称为根模块。 根据{{​​3}},默认的根模块集定义为:

  
      
  • java.se模块是root用户(如果存在)。如果它不存在那么升级模块路径上或导出至少一个包的系统模块中的每个java。*模块都是一个根。

  •   
  • 升级模块路径上或导出至少一个包的系统模块中的每个非java。*模块(无限制)也是根。

  •   

以下是java.se模块中包含的内容的精美图形: JEP 261 (来源:enter image description here

java.se聚合模块一样,java.se.ee模块本身不提供任何类,它是一个包含以下模块的聚合模块:

java.se
java.activation
java.annotations.common
java.corba
java.transaction
java.xml.bind
java.xml.ws
  

是否有可靠的方法来了解默认可观察系统模块的确切列表?我知道有一个--list-modules选项,但它列出了所有模块,包括java.se.ee。

这里的术语略有不同。在Java 9中,如果满足以下两个条件,则模块 observable

  • 模块是系统模块(即来自JDK)或者它被添加到模块路径
  • 不会通过--limit-modules
  • 排除该模块

这意味着默认情况下java.se.ee observable

我认为你想知道哪些模块是根模块 的默认模块?在这种情况下,请参阅上面的根模块定义。