我有一些使用JAXB API类的代码,这些类已作为Java 6/7/8中的JDK的一部分提供。当我用Java 9运行相同的代码时,在运行时得到错误,指示找不到JAXB类。

从Java 6开始,JAXB类就作为JDK的一部分提供了,那么为什么Java 9再也找不到这些类了呢?


当前回答

对于我来说,Eclipse 2020-12(4.18.0)正在使用inbuild (org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507\jre)

在安装的JREs(这是我想要的)中将java更新到1.8后解决了这个问题。

希望能有所帮助。

其他回答

我跟踪了这个URL,下面的设置真的帮助了我。我在Macbook Pro中使用带有STS IDE的Java 10。这招很管用。

   <dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.0</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>javax.activation-api</artifactId>
    <version>1.2.0</version>
</dependency>

对于Java Web Start执行,我们可以像这样使用Andy Guibert的建议:

<j2se version="1.6+" 
      java-vm-args="-XX:+IgnoreUnrecognizedVMOptions --add-modules=java.se.ee"/>

注意——add-modules中额外的“=”。请参阅此OpenJDK票据或Java平台的“理解运行时访问警告”中的最后一个注释,标准版Oracle JDK 9迁移指南。

这对我很管用。只添加jaxb-api是不够的。

        <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-impl</artifactId>
            <version>${jaxb-api.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>${jaxb-api.version}</version>
        </dependency>

我知道我迟到了,但我的错误最终需要一个不同的解决方案……也非常简单

我最初部署到Tomcat 9,然后意识到我需要7…我忘记将我的类路径映射回build.xml中的7版本

希望这将在将来修复其他人的错误,谁设法忽略这个简单的问题,就像我一样!

由于JavaEE现在由https://jakarta.ee/管理,因此2.3.2的新Maven坐标为:

https://eclipse-ee4j.github.io/jaxb-ri/#maven-artifacts

第一个发布的jaxb。版本为2.3.2。

<properties>
  <jaxb.version>2.3.2</jaxb.version>
</properties>

<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>${jaxb.version}</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>${jaxb.version}</version>
</dependency>