【问题标题】:NoClassDefFoundError: javax/json/bind/JsonbBuilder even after adding javaee-api to dependenciesNoClassDefFoundError: javax/json/bind/JsonbBuilder 即使在将 javaee-api 添加到依赖项之后
【发布时间】:2019-08-20 15:10:03
【问题描述】:

我正在使用带有 netbeans 的 maven。每当我运行该程序时,即使在将javaee-api 8.0 添加到依赖项之后,它也会给我java.lang.NoClassDefFoundError 异常。

这是我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>example</groupId>
    <artifactId>JavaApp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <build>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
            <debug>false</debug>
        </configuration>
        </plugin>
    </plugins>
    </build>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
    </properties>
    <dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0</version>
        <scope>provided</scope>
    </dependency>
    </dependencies>
</project>

我可以在依赖项中看到javax.json.bind.*。我不明白为什么我无法运行该程序。有什么指点吗?

【问题讨论】:

  • 请添加您获得的确切课程NoClassDefFoundError
  • 尝试添加&lt;dependency&gt; &lt;groupId&gt;javax.json&lt;/groupId&gt; &lt;artifactId&gt;javax.json-api&lt;/artifactId&gt; &lt;version&gt;1.1.4&lt;/version&gt; &lt;/dependency&gt;作为依赖
  • @Spara 我什至已经下载了源代码以及 javaee 8 的二进制文件,我可以在依赖项中看到 javax.json.bind.JsonbBuilder。我的意思是,为什么即使在将依赖项添加到 javaee-api 之后我也会收到错误消息?
  • @star67 javax.json.bind.JsonbBuilder
  • 让我为你描述一下作为答案

标签: java maven jakarta-ee


【解决方案1】:

您面临的问题是您需要手动添加您在项目中使用的库。正如您所说,javaee-apijavax.json.bind.* 具有依赖关系,但其范围是 provided 这意味着它将由您的 jdk 或运行时中的容器(例如应用程序服务器)提供(更多有关范围检查的信息this)。因此,您需要将所需的库添加为 compile 范围(默认范围),您在运行时需要它们。

【讨论】:

  • 最后一个问题。为什么我不能将compile 范围添加到javaee-api 并让它工作?
  • 因为scope的默认值是compile,所以默认添加了。
  • @baba 它会给你的库添加很多不好的库,而且它们应该由你的容器提供。
猜你喜欢
  • 2018-12-17
  • 1970-01-01
  • 2018-11-10
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
相关资源
最近更新 更多