--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 仅在编译时[重复]的主要内容,如果未能解决你的问题,请参考以下文章

const对象仅在文件内有效

编译器错误 - 仅在从命令行编译时

仅在项目发生更改时添加编译时间戳 (C)

VC++ LNK2001:仅在 64 位编译时无法解析外部符号

“无效的应用程序。删除?”仅在使用诺基亚 SDK 编译时

Nginx编译安装: