2017-10-16 32 views
0

用我的pom.xml如下:的Maven /进口基础知识 - 找不到类

<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依赖关系(我的首选解决方案)还是导入调用,这应该是非常必要的吗?

在此先感谢

回答

1

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

你如何建立你的maven项目,mvn干净安装?

+0

我的项目是在IntelliJ中 - 它被定义为一个“maven项目”。我没有在项目的任何地方看到m2文件夹。我尝试重新导入pom.xml无济于事。 – Tiggyboo

+0

你在运行什么操作系统。 m2文件夹(linux/MacOS)位于〜/ .m2在Windows上不确定。但我认为当你通过IntelliJ或任何其他IDE运行Maven项目时,他们应该下载依赖关系。 – Idlepoze

+0

MacOS - 谢谢,我确实找到它了: 'R0229283:.m2 afs01 $ tree | grep的JSON │├──JSON ││└──JSON ││├──JSON-20170516.jar ││├──JSON-20170516.jar.sha1 ││├──JSON-20170516.pom ││└──json-20170516.pom.sha1' 我会尝试将其添加到类路径。 – Tiggyboo

1

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

  1. 如果它是JAR,那么您有责任为运行时提供依赖性瓶。对于任何Java应用程序,可以通过多种方式完成:通过CLASSPATH环境,JVM的-cp参数,在JAR文件MANIFEST文件中定义位置,或者通过创建一个包含所有依赖关系的胖jar包来实现。

(注:如果您使用的IDE像Eclipse - 它会为你当你跑在它的代码它包括所有的Maven的依赖关系到运行的类路径,但不是IDE之外的真正运行时)。

  • 如果是WAR或EAR与范围compileruntime所有依赖将被包括到WAR/EAR文件,将可用于您的代码。但是,如果范围是provided - 它会回到JAR的相同。 provided当需要依赖项位于运行WAR/EAR的Application Server类路径中时,该范围非常有用。它可以防止在每个WAR/EAR和可能的版本冲突中打包常见的依赖关系。