【问题标题】:How to resolve javax.xml.bind for SE-11 by adding external jars?如何通过添加外部 jar 来解决 SE-11 的 javax.xml.bind?
【发布时间】:2020-10-28 15:10:50
【问题描述】:

我有一个足够简单的程序:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;

public class Main {

    public static void main(String[] args) throws JAXBException {
        JAXBContext context0 = JAXBContext.newInstance(String.class);
        
    }

}

因为我要使用java-11,所以不再提供javax.xml.bind,所以需要自己添加。 我不想使用 Maven,而是添加外部 jars。 正如https://stackoverflow.com/a/43574427/3014199所建议的那样 我首先将 jakarta.xml.bind-api-2.3.2.jar 添加到模块路径中,然后将 https://mvnrepository.com/artifact/jakarta.xml.bind/jakarta.xml.bind-api/2.3.2 jakarta.activation-api-1.2.1.jar 的依赖项添加到模块路径中,并将两者都标记为导出:

现在我明白了

Error: Unable to initialize main class Main
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

所以我将上面建议的其他库 jaxb-runtime-2.3.2.jar 添加到类路径中:

错误没有改变,所以我添加了每个 https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime/2.3.2 的所有编译依赖项:

  • FastInfoset-1.2.16.jar
  • istack-commons-runtime-3.0.8.jar
  • stax-ex-1.8.1.jar
  • txw2-2.3.2.jar

到类路径:

为了确保我再次检查“订购和导出”下的所有罐子,但错误仍然存​​在。 我也尝试将所有 jars 添加到模块路径并将所有 jars 添加到类路径但无济于事。

【问题讨论】:

  • 您有module-info.java 文件吗?如果是,请出示。
  • @howlger 我没有“module-info.java”文件,我总是点击“不创建”。我需要一个吗?
  • 你忘了添加这两个库的依赖。它们列在 mvnrepository.com 的信息页面上。如果您使用 Maven 或 Gradle,那么这些依赖项将自动添加。
  • 您不需要module-info.java 文件。但是,如果您有一个,则必须将 JAR 放在模块路径中,否则就像您的情况一样,您必须将 JAR 放在类路径中(如果多个 JAR 中不存在任何包,则模块路径也可以使用) .导出的 JAR 对 Java 构建路径中具有该项目的其他项目可见(如果您只有一个项目,则没关系)。 Main 中是否有错误或警告?如果没有,请查看包含缺失类的 JAR 的运行配置(Dependencies 选项卡和 Show Command Line 按钮)。

标签: java eclipse java-11


【解决方案1】:

将所有 jar 移动到类路径后,我得到了 com.sun.xml.internal 的 classNotFoundException... 在 https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl/2.3.1 添加 jar 后,一切正常。

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2011-06-07
    相关资源
    最近更新 更多