gpt4 book ai didi

java - 当通过 Java Web Start 部署时,如何在 Java 1.9 下运行使用 JAXB 的代码

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:04 26 4
gpt4 key购买 nike

我使用 Java Web Start 将三个应用程序部署到客户端。所有这三个应用程序都使用 JAXB。在 Java 1.9 下,要加载 jaxb 模块,您必须使用:

--add-modules java.xml.bind

Java Web Start 让您可以将 VM 参数传递给具有 java/j2se 标记的 java-vm-args 属性的应用程序。但是,仅支持文档中列出的参数,--add-modules 不在 that list 中。 .

所以问题是,当通过使用 JAXB 的 Java Web Start 运行代码时,如何将 "--add-modules java.xml.bind" 传递给 1.9 VM?

这是我尝试过的,我的测试表明 java-vm-arg 属性确实不支持 --add-modules:

<resources>
<property name="jnlp.packEnabled" value="true"/>
<java version="9" java-vm-args="--add-modules java.xml.bind"/>
<java version="1.8+"/>
<jar href="redacted.jar"/>
</resources>

最佳答案

根据 Modules Shared with Java EE Not Resolved by Default Java 9 迁移文档 --add-modules 部分是一种变通方法,因为 JAXB 将来会从 JDK 中删除。所以为了解决这个问题,我只是在我的类路径中包含了 JAXB API 和一个实现,使用 ANT+Ivy 这个配置得到了我需要的东西:

 <dependency org="org.glassfish.jaxb" name="jaxb-runtime" rev="2.3.0"/>
<dependency org="org.glassfish.jaxb" name="jaxb-core" rev="2.3.0"/>
<dependency org="javax.xml.bind" name="jaxb-api" rev="2.3.0"/>
<dependency org="javax.activation" name="activation" rev="1.1.1"/>

一些传递依赖项随之而来(FastInfoset、istack-commons、stax-ex 和 txw2)。这些是桌面 swing 应用程序,所以我希望 jar 文件尽可能小,在 pack200 压缩后它只增加了大约 600K 到我的 fat jar。

glassfish 实现确实会导致来自 Java 9 的非法反射访问警告。我认为很快就会发布一个不使用非法反射的更新。

关于java - 当通过 Java Web Start 部署时,如何在 Java 1.9 下运行使用 JAXB 的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46411154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com