【发布时间】: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 按钮)。