该模块系统讲的无名模块作为在从类路径加载应用的情况下构建模块图的方式。此外,从文档本身来看:
当编译器在未命名模块中编译代码,或者调用Java启动程序并将应用程序的主类从类路径加载到应用程序类加载器的未命名模块中时,则将使用未命名模块的默认根模块集计算如下:
该
java.se模块是根(如果存在)。如果不存在,则
java.*升级模块路径上或系统模块中的每个模块exports中至少有一个无限定的软件包是根。
non-java.*升级模块路径上或系统模块中
exports至少有一个无限制的软件包的每个模块也是根。
否则,默认的根模块集取决于以下阶段:
在编译时,通常是正在编译的模块集(下面有更多内容);
在链接时为空;和
在运行时,它是应用程序的主模块,通过 –module(或简称为-m)启动器选项指定。
有时需要将模块添加到默认根集中,以确保特定的平台,库或服务提供者模块将出现在模块图中。在任何阶段都可以选择
--add-modules <module>(,<module>)*其中
<module>是模块名称,将命名模块添加到默认的根模块集合中。
在jetty.project中也遇到了类似的问题,其中jdk邮件列表中的一个线程对此进行了讨论,并使用以下修复程序:
--add-modules java.se.ee
使他们可以访问所有Java SE模块的方法,在您的情况下应该是:
--add-modules java.xml.bind
要在maven中使用它,可以将其嵌入到maven-compiler-plugin using中。
<compilerArgs> <arg>--add-modules</arg> <arg>java.xml.bind</arg></compilerArgs>
正如ZhekaKozlov 在这里建议的那样。
需要注意的重要一点是,标记不赞成使用API也意味着您可能想摆脱使用它。为了适应这种方式,您可能可以开始使用依赖项jaxb-api:2.3.0,现在可以将其作为模块加载,也可以从类路径中执行。您需要进行的更改是将以下内容添加到依赖项列表中:
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version></dependency>
更新:-最终,在Java-10已经发布并且接下来是JDK / 11的情况下,理想情况下,应该遵循指向 JEP 320的链接:删除Java EE和CORBA模块,并进一步将此类依赖关系替换为其独立的库。



