我有一些使用JAXB API类的代码,这些类已作为Java 6/7/8中的JDK的一部分提供。当我用Java 9运行相同的代码时,在运行时得到错误,指示找不到JAXB类。
从Java 6开始,JAXB类就作为JDK的一部分提供了,那么为什么Java 9再也找不到这些类了呢?
我有一些使用JAXB API类的代码,这些类已作为Java 6/7/8中的JDK的一部分提供。当我用Java 9运行相同的代码时,在运行时得到错误,指示找不到JAXB类。
从Java 6开始,JAXB类就作为JDK的一部分提供了,那么为什么Java 9再也找不到这些类了呢?
当前回答
在最近的JDK 9.0.1中,这些解决方案都不适合我。
我发现这个依赖列表对于一个正确的功能来说已经足够了,所以你不需要显式地指定——add-module(尽管它是在这些依赖的pom's中指定的)。你只需要指定以下依赖项列表:
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
其他回答
在编译和运行时,添加开关——add-modules java.xml.bind
javac --add-modules java.xml.bind <java file name>
java --add-modules java.xml.bind <class file>
JDK 9模块的良好介绍也可以在以下位置找到: https://www.youtube.com/watch?v=KZfbRuvv5qc
对于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迁移指南。
在pom.xml中添加javax.xml.bind依赖项
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
如果您正在调用SOAP web服务(例如,使用jaxws-maven-plugin),只需添加此依赖项,所有JAXB错误就会消失:
<dependency>
<groupId>org.glassfish.metro</groupId>
<artifactId>webservices-rt</artifactId>
<version>2.4.3</version>
</dependency>
使用Java 13进行测试
干净的解决方案为所有jdk >= 9
您需要向构建中添加两个依赖项
的jaxb-api jaxb实现
作为实现,我选择使用glassfish的参考实现来摆脱旧的com。Sun类/库。 因此,我添加了我的专业构建
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.1</version>
</dependency>
注意,从版本2.3.1开始,您不需要添加javax。不再激活。(参见https://github.com/eclipse-ee4j/jaxb-ri/issues/1222)