我有一些使用JAXB API类的代码,这些类在Java 6/7/8中作为JDK的一部分提供。当我使用Java 9运行相同的代码时,在运行时我会收到错误,指示无法找到JAXB类。
自Java 6以来,JAXB类已作为JDK的一部分提供,那么为什么Java 9不再能够找到这些类?
答案 0 :(得分:872)
JAXB API被认为是Java EE API,因此不再包含在Java SE 9中的默认类路径中。在Java 11中,它们完全从JDK中删除。
Java 9引入了模块的概念,默认情况下,java.se
聚合模块在类路径(或更确切地说,模块路径)上可用。顾名思义,java.se
聚合模块不包含传统上与Java 6/7/8捆绑在一起的Java EE API。
幸运的是,JDK 6/7/8中提供的这些Java EE API仍然在JDK中,但默认情况下它们并不在类路径上。以下模块中提供了额外的Java EE API:
java.activation
java.corba
java.transaction
java.xml.bind << This one contains the JAXB APIs
java.xml.ws
java.xml.ws.annotation
快速而肮脏的解决方案:(仅限JDK 9/10)
要在运行时使JAXB API可用,请指定以下命令行选项:
--add-modules java.xml.bind
但我仍然需要使用它来使用Java 8 !!!
如果您尝试使用较旧的JDK指定--add-modules
,那么它会爆炸,因为它是一个无法识别的选项。我建议选择以下两种方法之一:
$JAVA_HOME/release
JAVA_VERSION
属性来检查JDK版本,从而在启动脚本(如果有的话)中有条件地应用该参数。-XX:+IgnoreUnrecognizedVMOptions
以使JVM静默忽略无法识别的选项,而不是炸毁。但要小心!您使用的任何其他命令行参数将不再由JVM验证。此选项适用于Oracle / OpenJDK以及IBM JDK(从JDK 8sr4开始) 替代快速解决方案:(仅限JDK 9/10)
请注意,您可以通过指定--add-modules java.se.ee
选项在运行时使所有上述Java EE模块可用。 java.se.ee
模块是一个聚合模块,包含java.se.ee
以及上述Java EE API模块。
正确的长期解决方案:( JDK 9及更高版本)
上面列出的Java EE API模块都标记为@Deprecated(forRemoval=true)
,因为它们在scheduled for removal中为Java 11。因此,--add-module
方法将不再适用于Java 11开箱即用。
在Java 11和转发中需要做的是在类路径或模块路径上包含您自己的Java EE API副本。例如,您可以将JAX-B API添加为maven依赖项,如下所示:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
有关Java模块化的完整详细信息,请参阅JEP 261: Module System
对于Android Studio开发人员:(JDK 9及更高版本)
您可能想知道在哪里使用此解决方案。
dependencies {
// JDK 11 JaxB error fix
implementation "javax.xml.bind:jaxb-api:2.2.11"
implementation "com.sun.xml.bind:jaxb-core:2.2.11"
implementation "com.sun.xml.bind:jaxb-impl:2.2.11"
implementation "javax.activation:activation:1.1.1"
}
@ mikhail-kholodkov建议使用Gradle here。上面的依赖项,然后我可以使用JDK11继续我的项目。
答案 1 :(得分:181)
在我的情况下(spring boot fat jar)我只需将以下内容添加到pom.xml。
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
答案 2 :(得分:57)
在最近的JDK 9.0.1中,这些解决方案都不适合我。
我发现这个依赖项列表足以使其正常运行,因此不需要来显式指定--add-module
(尽管它是在这些依赖项的pom中指定的)。您唯一需要的是指定此依赖项列表:
<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>
答案 3 :(得分:36)
这对我有用:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.0</version>
</dependency>
正如@Jasper建议的那样,为了避免依赖整个EclipseLink库,你也可以依赖于EclipseLink MOXy:
<强>的Maven 强>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.7.3</version>
</dependency>
<强>摇篮强>
compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.moxy', version: '2.7.3'
作为我的Java 8应用程序的依赖项,它生成一个* .jar,它可以由JRE 8或JRE 9运行而不需要额外的参数。
此外,这需要在使用JAXB API之前在某处执行:
System.setProperty("javax.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");
到目前为止工作得很好,作为一种解决方法。虽然看起来不是一个完美的解决方案......
答案 4 :(得分:23)
这是因为Java版本(如果您使用的是jdk 9或更高版本)只需将其添加到pom中
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
答案 5 :(得分:16)
在编译和运行时,添加开关--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
答案 6 :(得分:15)
适用于所有=> 9的所有JDK的干净解决方案
您需要在构建中添加两个依赖项
作为一个实现,我选择使用glassfish的参考实现来摆脱旧的com.sun类/库。 因此,我添加了我的Maven版本
<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.activation。 (请参阅https://github.com/eclipse-ee4j/jaxb-ri/issues/1222)
答案 7 :(得分:11)
您可以使用--add-modules=java.xml.bind
JVM选项将xml绑定模块添加到JVM运行时环境。
例如:java --add-modules=java.xml.bind XmlTestClass
答案 8 :(得分:11)
为了解决这个问题,我在项目中导入了一些JAR文件:
http://search.maven.org/remotecontent?filepath=javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar
答案 9 :(得分:10)
这对我有用。仅添加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>
答案 10 :(得分:9)
我还使用 Java 11 和
跨ClassNotFoundException:javax.xml.bind.DatatypeConverter<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
我尝试了所有有关添加javax.xml.bind:jaxb-api或spring boot jakarta.xml.bind-api的工作。.我发现jjwt版本0.10.0中有修复的提示..但最重要的是, jjwt软件包现在已拆分!
因此,请检查此引用:https://github.com/jwtk/jjwt/issues/510
简单来说,如果您使用
Java11和 jjwt 0.9.x和 您将遇到ClassNotFoundException:javax.xml.bind.DatatypeConverter问题,
去
jjwt版本0.11.x,但使用分割的软件包:https://github.com/jwtk/jjwt#install
您无法找到jjwt依赖项的更高版本,因为它们拆分了软件包。
干杯。
答案 11 :(得分:9)
转到Build.gradle并为Java 9或Java 10添加以下依赖项。
ALTER TABLE Users ALTER COLUMN Role tinyint NOT NULL
答案 12 :(得分:8)
对于Java Web Start Execution,我们可以使用Andy Guibert的建议:
<j2se version="1.6+"
java-vm-args="-XX:+IgnoreUnrecognizedVMOptions --add-modules=java.se.ee"/>
注意额外的&#34; =&#34;在--add-modules中。请参阅this OpenJDK Ticket或&#34;了解运行时访问警告&#34;中的最后一个注释; Java Platform, Standard Edition Oracle JDK 9 Migration Guide。
答案 13 :(得分:7)
2019年4月更新
JAXB版本的Changelong位于https://javaee.github.io/jaxb-v2/doc/user-guide/ch02.html
摘录:
4.1. Changes between 2.3.0.1 and 2.4.0
JAXB RI is now JPMS modularized:
All modules have native module descriptor.
Removed jaxb-core module, which caused split package issue on JPMS.
RI binary bundle now has single jar per dependency instead of shaded fat jars.
Removed runtime class weaving optimization.
4.2. Changes between 2.3.0 and 2.3.0.1
Removed legacy technology dependencies:
com.sun.xml.bind:jaxb1-impl
net.java.dev.msv:msv-core
net.java.dev.msv:xsdlib
com.sun.xml.bind.jaxb:isorelax
4.3. Changes between 2.2.11 and 2.3.0
Adopt Java SE 9:
JAXB api can now be loaded as a module.
JAXB RI is able to run on Java SE 9 from the classpath.
Addes support for java.util.ServiceLoader mechanism.
Security fixes
权威链接位于https://github.com/eclipse-ee4j/jaxb-ri#maven-artifacts
JAXB工件的Maven坐标
jakarta.xml.bind:jakarta.xml.bind-api:JAXB的API类。需要 针对JAXB进行编译。
org.glassfish.jaxb:jaxb-runtime:JAXB的实现,使用的运行时 用于序列化和反序列化java对象到/从xml。
JAXB fat-jar包:
com.sun.xml.bind:jaxb-impl:JAXB运行时脂肪 广口瓶中。
相反 对于org.glassfish.jaxb工件,这些罐子都具有依赖性 里面的课程。这些工件不包含JPMS模块 描述。 在Maven项目中,org.glassfish.jaxb工件是 应该用来代替。
org.glassfish.jaxb:jaxb-runtime:jar:2.3.2拉入:
[INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:2.3.2:compile
[INFO] | +- jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.2:compile
[INFO] | +- org.glassfish.jaxb:txw2:jar:2.3.2:compile
[INFO] | +- com.sun.istack:istack-commons-runtime:jar:3.0.8:compile
[INFO] | +- org.jvnet.staxex:stax-ex:jar:1.8.1:compile
[INFO] | +- com.sun.xml.fastinfoset:FastInfoset:jar:1.2.16:compile
[INFO] | \- jakarta.activation:jakarta.activation-api:jar:1.2.1:compile
原始答案
在Maven中关注Which artifacts should I use for JAXB RI in my Maven project?,您可以使用以下配置文件:
<profile>
<id>java-9</id>
<activation>
<jdk>9</jdk>
</activation>
<dependencies>
<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>
</profile>
依赖树显示:
[INFO] +- org.glassfish.jaxb:jaxb-runtime:jar:2.3.0:compile
[INFO] | +- org.glassfish.jaxb:jaxb-core:jar:2.3.0:compile
[INFO] | | +- javax.xml.bind:jaxb-api:jar:2.3.0:compile
[INFO] | | +- org.glassfish.jaxb:txw2:jar:2.3.0:compile
[INFO] | | \- com.sun.istack:istack-commons-runtime:jar:3.0.5:compile
[INFO] | +- org.jvnet.staxex:stax-ex:jar:1.7.8:compile
[INFO] | \- com.sun.xml.fastinfoset:FastInfoset:jar:1.2.13:compile
[INFO] \- javax.activation:activation:jar:1.1.1:compile
要在Eclipse中使用它,请说Oxygen.3a Release(4.7.3a)或更高版本,Ctrl-Alt-P,或右键单击项目Maven,然后选择配置文件。
答案 14 :(得分:5)
我在Java 11上使用Spring Boot 2.0.5.RELEASE
遇到了相同的问题。
仅添加javax.xml.bind:jaxb-api:2.3.0
并不能解决问题。我还必须将Spring Boot更新为最新的里程碑2.1.0.M2
,因此我认为它将在下一个正式版本中得到解决。
答案 15 :(得分:5)
在pom.xml中添加javax.xml.bind依赖项
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
答案 16 :(得分:5)
我遵循了该URL,以下设置确实为我提供了帮助。我在Macbook Pro中将Java 10与STS IDE一起使用。它像一种魅力。
<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>
答案 17 :(得分:5)
使用JDK 9+时,您需要添加JAX-B依赖项。对于Android Studio用户,您需要将其添加到build.gradle
的{{1}}块中:
dependencies {}
答案 18 :(得分:5)
这解决了我在Java 12上运行Apache Camel 2.24.1的依赖项带来的问题:
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0.1</version>
</dependency>
答案 19 :(得分:4)
此问题的根本原因是 Gradle Daemon 使用 JDK11,您将 JAVA_HOME 设置为 JDK11,或者在运行 JDK11 的共享守护程序中运行 Gradle Task。
安卓:
检查您的项目结构设置,您可以从那里将 JDK 更改为 JDK8。
也可以设置一个JAVA_HOME,指向java8 home。
答案 20 :(得分:3)
由于JavaEE现在受https://jakarta.ee/约束,因此自2.3.2起的新Maven坐标为:
https://github.com/eclipse-ee4j/jaxb-ri#maven-artifacts
第一个发行的jaxb.version是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>
答案 21 :(得分:3)
升级时,您可能会遇到以下问题:
Rc
Hibernate通常需要默认情况下不再提供的JAXB。您可以 添加java.xml.bind模块以使用Java9恢复此功能 或Java10(即使已弃用该模块)。
从Java11开始,该模块不可用,因此您唯一的选择是 添加JAXB RI(您可以从Java9开始,添加 java.xml.bind模块:
Maven
java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
成绩(build.gradle.kts):
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</dependency>
Gradle(build.gradle)
implementation("org.glassfish.jaxb:jaxb-runtime")
如果要指定特定版本,请在此处查看: https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime
答案 22 :(得分:3)
您只需要1个依赖项:
dependencies {
implementation ("jakarta.xml.bind:jakarta.xml.bind-api:2.3.2")
答案 23 :(得分:3)
不是答案,而是一个附录:我得到的是因为如果JAVA_HOME指向Java 9安装(准确地groovysh
),则运行java version "9.0.1"
(Groovy 2.4.13)会非常失败:
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:107)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:129)
Caused by: java.lang.NoClassDefFoundError: Unable to load class groovy.xml.jaxb.JaxbGroovyMethods due to missing dependency javax/xml/bind/JAXBContext
at org.codehaus.groovy.vmplugin.v5.Java5.configureClassNode(Java5.java:400)
at org.codehaus.groovy.ast.ClassNode.lazyClassInit(ClassNode.java:277)
at org.codehaus.groovy.ast.ClassNode.getMethods(ClassNode.java:397)
...
..
.
..
...
at org.codehaus.groovy.tools.shell.Groovysh.<init>(Groovysh.groovy:135)
at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
at org.codehaus.groovy.tools.shell.Main.<init>(Main.groovy:66)
at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
at org.codehaus.groovy.tools.shell.Main.main(Main.groovy:163)
... 6 more
解决方案是:
转到github.io上的JAXB Project(&#34; JAXB是根据双重许可证授予的 - CDDL 1.1和带有类路径异常的GPL 2.0&#34; )
下载jaxb-ri-2.3.0.zip
在您放置java基础结构文件的任何地方解压缩(在我的情况下,/usr/local/java/jaxb-ri/
)。可能存在其他解决方案(可能通过SDKMAN,我不知道)
确保lib子目录中的jar位于CLASSPATH
。我通过在bash启动时启动的脚本/etc/profile.d/java.sh
来实现,我在其中添加了(在许多其他行中)以下循环:
打包成一个函数......
function extend_qzminynshg {
local BASE="/usr/local/java"
for LIB in jaxb-api.jar jaxb-core.jar jaxb-impl.jar jaxb-jxc.jar jaxb-xjc.jar; do
local FQLIB="$BASE/jaxb-ri/lib/$LIB"
if [[ -f $FQLIB ]]; then
export CLASSPATH=$FQLIB:$CLASSPATH
fi
done
}
extend_qzminynshg; unset extend_qzminynshg
它有效!
答案 24 :(得分:2)
对我来说,使用Java 11并成功实现了这一目标:
plugins {
id 'java'
}
dependencies {
runtimeOnly 'javax.xml.bind:jaxb-api:2.3.1'
}
答案 25 :(得分:2)
好吧,我遇到了同样的问题,但我使用的是Java 8,并且不断收到此错误,我尝试了大部分解决方案。但事实证明我的maven仍然指向java 9甚至 - 虽然我将全局Java版本设置为8,一旦我修复它一切正常。
对于可能遇到此类问题的人,请查看How to fix Maven to use default Java
答案 26 :(得分:2)
添加以下依赖项对我有用。
<!-- API, java.xml.bind module -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
<!-- Runtime, com.sun.xml.bind module -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
答案 27 :(得分:1)
您需要将jaxb依赖项添加到maven。 glassfish实现版本2.3.2与新的jakarta EE jaxb api版本2.3.2完全兼容。
jest.fn().mockResolvedValue('test')
答案 28 :(得分:1)
将项目升级到Java 11之后,我遇到了类似的问题,然后解决了将其升级到Spring Boot 2.1.1的问题,该版本显然支持Java 11,this帮助了
答案 29 :(得分:1)
旧答案“通过切换到amazoncorretto解决了问题” 新闻答案:我最新使用了corretto,但与jdk 1.8类似。所以无论如何我们都需要手动添加依赖项
答案 30 :(得分:1)
在 Debian 10 中的 Java项目上工作时遇到此问题。
每次我启动应用程序时,它都会在日志文件中引发错误:
java.lang.NoClassDefFoundError:javax / xml / bind / JAXBException
这是我的解决方法:
该问题通常是由于类路径中缺少 JAXB 库(用于XML绑定的Java体系结构)引起的。 JAXB包含在Java SE 10或更早版本中,但已从Java 11或更高版本的Java SE中删除-已移至Jakarta EE项目下的Java EE。
因此,我使用以下方法检查了Java版本:
java --version
它给了我这个输出
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Debian-1deb10u1, mixed mode, sharing)
所以我遇到了 JAXBException 错误,因为我正在使用 Java 11 ,该类没有缺少JAXB库(用于XML绑定的Java体系结构) 。 JAXB包含在其中。
要解决此问题,我必须将 JAXB API 库添加到tomcat安装目录的 lib (/opt/tomcat/lib
)目录中:>
sudo wget https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.4.0-b180830.0359/jaxb-api-2.4.0-b180830.0359.jar
然后我将其从jaxb-api-2.4.0-b180830.0359.jar
重命名为jaxb-api.jar
:
sudo mv jaxb-api-2.4.0-b180830.0359.jar jaxb-api.jar
注意:请确保您更改了允许tomcat访问文件的权限,并且还将所有权更改为tomcat
:
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 777 /opt/tomcat/
然后我重新启动了Tomcat服务器:
sudo systemctl restart tomcat
资源:[Solved] java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
仅此而已。
我希望这会有所帮助
答案 31 :(得分:0)
为Java 8目标编译时需要使用的依赖项版本。在Java 8、11和12 JRE中测试了应用程序。
<!-- replace dependencies that have been removed from JRE's starting with Java v11 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.8-b01</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.8-b01</version>
</dependency>
<!-- end replace dependencies that have been removed from JRE's starting with Java v11 -->
答案 32 :(得分:0)
如果仅通过添加此依赖关系来调用SOAP Web服务(例如,使用"services": {
),则所有JAXB错误都会消失:
this.getService("ShellUIService")
经过Java 13测试
答案 33 :(得分:0)
libraryDependencies += "javax.xml.bind" % "jaxb-api" % "2.3.1"
答案 34 :(得分:0)
这对我有用,我有一个可以在Java 8中编译的spring boot项目,但是我不知道为什么有一天我的maven开始使用Java 11进行编译,而我曾经在Ubuntu中对其进行修复:
sudo update-java-alternatives -l
那显示了我PC上可用的JDK:
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64
所以我最终运行此命令以选择所需的命令:
sudo update-java-alternatives -s java-1.8.0-openjdk-amd64
就是这样,要进一步了解How to use the command update alternatives
答案 35 :(得分:0)
我知道我参加晚会很晚,但是我的错误最终需要一个不同的解决方案……也非常简单
我最初部署到Tomcat 9,并意识到我需要7 ...我忘记在build.xml中将类路径映射回7版本
希望这会在将来解决其他人的错误,就像我一样,他会设法忽略这个简单的问题!
答案 36 :(得分:0)
对我来说它的简单解决方案(Mac 用户)
run in terminal --> alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`;java -version"
then run --> j8
thats it !!(now run your mvn commands)
或者你可以在你的 .bash_profile 上面设置
答案 37 :(得分:0)
我想就这个异常给出一个简单易行的解决方案,只需将android studio 版本降级到 4.1.1 或更低。确保您没有 android studio arctic fox (2020.3.1) 版本,因为最新版本不支持旧的 android 项目。