当前位置: 首页 > 面试题库 >

如何在Maven中表达对Java EE功能的依赖性以过渡到Java 9?

笪昌翰
2023-03-14
问题内容

我们使用了maven工件,这些工件又取决于其他内部工件。我正在迁移到Java的9,并打算先将所有内容迁移到Java 9,而无需对代码进行模块化(即在未命名的模块中)。

我遇到的问题是我们依赖java.xml.bind,现在默认模块中未包含。有没有一种“正确的”方式来表达对java.xml.bindMaven的依赖?


问题答案:

该模块系统讲的无名模块作为在从类路径加载应用的情况下构建模块图的方式。此外,从文档本身来看:

当编译器在未命名模块中编译代码,或者调用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模块,并进一步将此类依赖关系替换为其独立的库。



 类似资料:
  • maven jetty插件有这个错误。我认为出现这个问题是因为插件的传输依赖性与新库冲突。这个错误出现在我将jersey1更改为jersey2并从com更改所有依赖项之后。sun到org。glassfish用于服务器客户端/核心/rs ws等。 等等 有人能回答如何避免这种错误吗?谢谢。 更新1:http://pastebin.com/ag2zdiSH链接到完整的pom

  • 我在我的项目中遇到了依赖关系冲突的问题。特别是,slf4j日志记录有两种实现:slf4j-简单和logback-经典,我得到了 在运行时。 logback-classic对我来说是必备的依赖项(因为dropwizard),但slf4j-simple不是真的,我想把它从我的uber项目中去掉。只是没那么容易。 我的“uber jar”依赖于“small jar”,而“small-jar”又依赖于“s

  • 本文向大家介绍DBMS中的全功能依赖,包括了DBMS中的全功能依赖的使用技巧和注意事项,需要的朋友参考一下 如果一个属性在功能上依赖于该属性,而不依赖于其任何适当的子集,则该属性在功能上完全依赖于另一个属性。 例如,如果属性Q在功能上依赖于P而不依赖于P的任何适当子集,则它完全依赖于另一个属性P。 让我们看一个例子- <ProjectCost> 项目编号 工程造价 001 1000 001 500

  • 在功能上。xml(Apache Karaf供应机制)标签<code>特性 例如:

  • 依赖关系:树是: 有人能帮我解除对验证api: jar: 1.0.0. GA的依赖吗?它似乎在wc pom中作为传递依赖。谢谢

  • 我正在做一个有大约200MB依赖项的项目,我希望避免由于带宽有限而导致的无用上传。 当我推我的Dockerfile(我一会儿会附上)时,我总是有一个~200MB的上传,即使我没有碰pom.xml: 这个Dockerfile应该生成一个200MB的fatJAR,包括所有依赖项,这就是为什么每次都会发生~200MB的上传。我想要实现的是构建一个包含所有依赖项的层,并“告诉”打包阶段不要将依赖项JAR包