我正在使用JAVA中的Web应用程序,我使用了org.json。在项目中进行一些计算,但是当我从localhost运行应用程序时,我收到以下错误消息。
java.lang.NoClassDefFoundError: org/json/JSONObject
我在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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cloudera.oryx</groupId>
<artifactId>projectname</artifactId>
<version>0.5.0-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-apache-client</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
</dependencies>
</dependencyManagement>
已编辑:完整的Pom.xml内容
要让它运行还有什么其他的事情要做?感谢。
答案 0 :(得分:1)
可能有多种原因,即使在添加NoClassDefFoundError
dependency
以下是您可以做的检查。
在主pom.xml的<dependencies>
部分添加依赖项。如果您觉得我在Rest --> service --> DAO
之类的应用程序中不需要服务层中的JSON库,那么请添加<dependencyManagement>
部分并添加具有out版本的依赖项 - 其中包含您想要的模块。
您需要确保settings.xml
配置正确,以便为您下载jar文件。
如果您使用某些IDE - eclipse,IntelliJ来更新依赖项,则另一种可能性是refresh
您的工作区。
您可以检查.m2 --> repository --> org --> json --> <version>
文件夹是否可用。这确认了jar的下载,你可以确认点2。
您可以取消归档war文件并检查库是否将json jar文件添加到最终包装中。这是最后检查的地方。
您可以使用mvn -U clean install
更新相关性。
答案 1 :(得分:0)
我认为问题是你的POM&#34;包装&#34;
构建webapp的正常方法是将包装指定为&#34; war&#34;这样Maven就会构建一个包含代码和依赖JAR的WAR文件。然后,将WAR文件部署到Web容器。
但你正在使用包装&#34; pom&#34;。
我假设这意味着您已经有另一个(子)POM文件来构建您的应用程序JAR。
我也猜测你正在使用&#34; jar&#34;作为那个POM的包装。
我还假设您正在将JAR部署到Web容器;例如手工或使用一些IDE集成东西。
我认为这里的问题是,当您将JAR文件部署到Web容器时,并且您不需要部署Jersey依赖项(&#39;因为它们已经存在!!),你没有部署&#34; json.org&#34; JAR文件。
无论如何,您获得异常的原因是Web容器类加载器无法找到该JAR文件。如果您在不使用WAR的情况下进行部署,某些内容必须将文件复制到Web容器的类加载器所在的位置。