--add-modules 仅在编译时[重复]
Posted
技术标签:
【中文标题】--add-modules 仅在编译时[重复]【英文标题】:--add-modules only on compilation [duplicate] 【发布时间】:2018-02-23 12:55:39 【问题描述】:我正在使用 maven 和 java-9 构建我的项目。我已经在我的pom.xml
文件中添加了:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>$maven-compiler-plugin.version</version>
<configuration>
<source>$java.version</source>
<target>$java.version</target>
<compilerArgs>
<arg>--add-modules</arg>
<arg>java.xml.bind</arg>
</compilerArgs>
</configuration>
</plugin>
但是,要运行应用程序,我必须像这样运行它:
java -jar --add-modules java.xml.bind my-app.jar
有没有办法构建应用程序,从没有--add-modules java.xml.bind
的命令行运行到 java 命令行参数?
【问题讨论】:
我认为但可能是错误的,你在maven-compiler-plugin
中所做的只是用于编译器javac
,它也被maven 用于编译你的项目,但不适用于运行时java
,所以你必须将 --add-modules
添加到 java 运行时 java
。
没错,这就是为什么我问了如何在不添加--add-modules
的情况下运行。
【参考方案1】:
我不久前创建了this answer,我在其中回答了这个问题,作为使用 Maven 在 Java-9 中公开非 java.se
包的附加信息。
添加的部分特别侧重于使用独立版本的
java.xml.*
API。为了适应它,您可能可以开始使用对 jaxb-api:2.3.0
的依赖项,它可以作为模块加载,也可以从类路径中执行。您需要进行的更改是将以下内容添加到您的依赖项列表中:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
通过这种方式,您可以确保迁移到模块的独立 API 并远离 deprecated piece of code.
【讨论】:
我发现 this Answer by bourgesl 在 Java 10 上为我启用了 JAXB。 @BasilBourque 嗯,答案是主要关注--add-modules
与类似模块的直接依赖关系。同意解决 JAXB,肯定有一个 additional step required - 接受的答案中建议的适当的长期解决方案。以上是关于--add-modules 仅在编译时[重复]的主要内容,如果未能解决你的问题,请参考以下文章