要使用 JDK SE 8 编译的 JAXB 项目,但也必须 运行 在 JRE 11 上

JAXB project to be compiled with JDK SE 8 but has to run also on JRE 11

我有一个 Java 程序,我在 Java 1.8 中编译,因为它有 - 在其他人之间 - 因为许多用户只有 JRE 1.8。在那个程序中,我经常使用 javax.xml.bind.* 来编组和解组 XML。为了在 JRE 9-10 上帮助用户 运行,我还提供了一个 shell 脚本,它使用 -add-modules 参数调用 java。对于拥有 Java 11+(且未安装以前的 Java 版本)的用户,这将不起作用,对吗?

所以我想到将 JAXB(或 EclipseLink Moxy)与我的程序捆绑在一起,并仍然使用 JDK8(使用 Eclipse IDE)对其进行编译。所以我 运行s 在 Java 8 上并且仍然在 Java 11+。那行得通吗?

谢谢!

这里有一个解决方案,将这些依赖项添加到您的 pom.xml(如果您正在使用)maven:

   <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${jaxb.api.version}</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>${jaxb.api.version}</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>${jaxb.api.version}</version>
    </dependency>

并且代码将在版本 java 8 和 11 中编译。

感谢您的评论和回答!

我终于搞定了运行ning,虽然还不完善。这就是我所做的:

  1. 已在此处下载 Jakarta JAXB 2.3.2:maven
  2. 解压后放入我的项目目录
  3. 在 Eclipse IDE 2020-6 中,我编辑了项目的属性 (Cmd+I):
  4. 在主题“Java 构建路径”下,我添加了 3 个带有“添加外部 JAR”的 jar:jaxb-impl.jar,jakarta.xml.bind-api.jar和 jakarta.activation.jar
  5. 我之前明显忘记的部分:同样在“订购和导出”下,我检查了 3 个 JAR。

为了测试结果,我在“Run/Debug”下告诉 Eclipse IDE,用 JRE 12 将“JRE”注册到 运行 我的主要 class。

这对我有用。