Maven / import基础知识 - 找不到类

时间:2017-10-16 16:19:40

标签: java json maven import

在我的pom.xml中使用以下内容:

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20170516</version>
</dependency>

然而,我感兴趣的json类在我的代码中无法识别(例如,JSONArray。)然后我尝试导入:

import org.json.*;

在这种情况下,所有内容都会编译,但是当我运行代码时,我会得到以下内容:

org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/json/JSONArray

我似乎找到了一些引用,表明我需要在我的类路径中使用json.jar,但是对于已建立的maven依赖项(我的首选解决方案)或导入调用是否真的有必要?

提前致谢

3 个答案:

答案 0 :(得分:1)

你的类路径中需要json.jar。它通常从maven存储库下载到您的m2文件夹中。 m2文件夹应该在您的类路径中。

如何构建你的maven项目,mvn clean install?

答案 1 :(得分:1)

这完全取决于您的项目包装类型。

  1. 如果它是JAR - 您有责任为运行时提供依赖项jar。对于任何Java应用程序,它可以通过多种方式完成:通过CLASSPATH环境,JVM的-cp参数,在JAR文件MANIFEST文件中定义位置,或者创建一个包含所有依赖项的胖jar。
  2. (注意:如果你像Eclipse一样使用IDE - 当你在其中运行代码时它会为你做。它包含所有Maven依赖项到运行类路径。但不适用于IDE之外的真实运行时。)< / em>的

    1. 如果是WAR或EAR,则范围为compileruntime的所有依赖项都将包含在WAR / EAR文件中,并且可用于您的代码。但是如果范围是provided - 它会回到与JAR相同的范围。当需要的依赖项位于将运行WAR / EAR的Application Server类路径中时,provided作用域非常有用。它可以防止在每个WAR / EAR和可能的版本冲突中打包公共依赖项。

答案 2 :(得分:0)

对我有用的是转到IntelliJ Maven侧面菜单,右键单击该项目,然后选择选项重新导入