相关疑难解决方法(0)

如何在Java 9中解决java.lang.NoClassDefFoundError:javax/xml/bind/JAXBException

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

自Java 6以来,JAXB类已作为JDK的一部分提供,为什么Java 9不再能够找到这些类?

java jaxb java-9 java-10 java-11

718
推荐指数
27
解决办法
46万
查看次数

使用Maven包含JAXB

在我的1.6.0_16 JDK上工作,我使用Apache CXF 2.5.2从WSDL生成我的存根类,它使用最新的jaxb-api 2.2.我知道可以使用jaxb-api 2.1,但为了避免兼容性问题,我宁愿让它使用当前版本.由于我的JDK具有jaxb 2.1,因此构建失败并显示以下消息:

error at @XmlElementRef(name = "protocol", namespace = "urn:ch.beo.emc", type = JAXBElement.class, required = false)
Run Code Online (Sandbox Code Playgroud)

因此,我尝试使用以下依赖项使maven包含最新的jaxb api和impl.

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.2.5</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

虽然这两个jar已经添加到Eclipse中的Maven Dependencies中,但错误消息在Eclipse和Maven构建中仍然存在.

如何在我的Maven构建中包含这些jar并让它们在Eclipse和目标系统中使用?


PS:请在这里找到完整的POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ch.beo</groupId>
    <artifactId>emc.front</artifactId>
    <version>3.1.3-SNAPSHOT</version>
    <repositories>
        <repository>
            <id>jboss</id>
            <name>JBoss</name>
            <url>http://repository.jboss.org/maven2/</url>
        </repository>
        <repository>
            <id>freehep</id>
            <name>Freehep</name>
            <url>http://java.freehep.org/maven2</url>
        </repository>
        <repository>
            <id>JCurl</id>
            <url>http://jcurl.berlios.de/m2/repo</url>
        </repository>
        <repository>
            <id>JavaNet</id>
            <url>http://download.java.net/maven/2/</url>
        </repository>
        <repository>
            <id>djmaven2</id>
            <url>http://www.fdvs.com.ar/djmaven2</url>
            <name>DynamicJasper public Repository</name>
        </repository>
    </repositories>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <defaultGoal>compile</defaultGoal>
        <sourceDirectory>src/main/java</sourceDirectory>
        <testSourceDirectory>src/test/java</testSourceDirectory> …
Run Code Online (Sandbox Code Playgroud)

java jaxb dependency-management maven

12
推荐指数
3
解决办法
7万
查看次数

是否可以在JDK 11上使用jlink来创建包含已删除的Java SE EE模块的运行时?

当我尝试在运行时包含java.xml.bind时,我收到一条错误消息:

错误:自动模块不能与jlink一起使用:java.activation from file:... [url to javax.activation-api-1.2.0.jar in my gradle cache]

我在模块路径上使用这些工件:

"javax.xml.bind:jaxb-api:2.4.0"
"org.glassfish.jaxb:jaxb-runtime:2.4.0-b180830.0438"
Run Code Online (Sandbox Code Playgroud)

看来,使用JDK 11,模块已被删除,但尚未提供完全模块化的替换.所以jlink无法从它们创建运行时.

为什么外部替换不是正确的模块化,因为它们已经是JDK 10中的模块?

java.activation不仅没有模块化,它还有一个新的模块名称"jakarta.activation".请参阅https://eclipse-ee4j.github.io/jaf/#Latest_News 我相信会进一步破坏事情,因为依赖于该模块的所有内容都必须在jlink运行之前再次更改.

java jlink

5
推荐指数
0
解决办法
316
查看次数

标签 统计

java ×3

jaxb ×2

dependency-management ×1

java-10 ×1

java-11 ×1

java-9 ×1

jlink ×1

maven ×1