java.lang.NoClassDefFoundError:javax / json / Json

时间:2014-08-21 07:03:45

标签: java json maven

我有一个简单的Java项目,我想构建一个Json字符串。为此,我使用javax.json:

import javax.json.Json;
import javax.json.JsonObjectBuilder;

public class MyClass {
    public void MyFunc() {
        JsonObjectBuilder myBuilder = Json.createObjectBuilder(); # this line will trigger the exception
        // And some other code
    }
}

该项目是使用maven构建的,并且在pom中我添加了这些依赖项:

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>javax.json</groupId>
    <artifactId>javax.json-api</artifactId>
    <version>1.0</version>
  </dependency>
  <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.json</artifactId>
      <version>1.0.4</version>
  </dependency>    
</dependencies>

编译没问题。 当我使用该命令执行代码时:

java -cp target/classes MyClass

主要在MyClass中。我明白了:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/json/Json
[...]
Caused by: java.lang.ClassNotFoundException: javax.json.Json
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 6 more

对Json.createObjectBuilder()的调用。

如果你在targer文件夹中运行它,症状是一样的:

java MyClass

我已经检查了〜/ .m2 / repository文件夹,我有javax / json / javax.json-api / 1.0 / javax.json-api-1.0.jar。当我解压缩它时,我可以看到Json.class文件。

出了什么问题?

2 个答案:

答案 0 :(得分:5)

类路径没有javax.json-api-1.0.jar。 像这样运行:

java -cp target / classes:〜/ .m2 / repository / javax / json / javax.json-api / 1.0 / javax.json-api-1.0.jar MyClass

答案 1 :(得分:0)

使用Tomcat作为容器,这种事情刚发生在我身上。但是我在IntelliJ上,并且按照以下过程解决了该问题:

项目结构工件→(选择工件)

输出布局上,您将看到Maven的项目库,选择将获得ClassNotFoundException的项目库,打开上下文菜单(右键单击),然后单击放入/ WEB-INF / lib

如果Tomcat在此处找不到对类的引用,它将自动在WEB-INF/lib文件夹之后检查lib

很抱歉IntelliJ上的题外话,但这对我也有帮助。