Maven:java.lang.NoClassDefFoundErrorexception,但是jars是在.m2中下载的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven:java.lang.NoClassDefFoundErrorexception,但是jars是在.m2中下载的相关的知识,希望对你有一定的参考价值。
我有一个tomcat项目:tomcat/webapps/Project
。该项目使用org.json
库,依赖项是用pom.xml
文件编写的:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
我在我的服务器上安装了maven
并运行此命令,而在Project
目录中:mvn install
然后我检查了/root/.m2/repository/org/json/20180813
文件夹,文件json-20180813.jar
就在那里!
但是,当我重新启动我的服务器:shutdown.sh
并尝试使用我的应用程序时,错误仍然存在:
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/json/JSONObject
为什么会发生这种情况以及如何解决?
编辑:人们指出将jar复制到tomcat/lib
目录。我做到了它并且有效。但是,我也会对一个更长久的解决方案感兴趣,以便将来我不会被迫与其他罐子再次这样做。
命令mvn install
将编译项目库并将其安装到本地存储库。此外,它还将在.m2/repository
目录下下载并复制任何依赖项。有关this question的更多详细说明,请参阅mvn install
。
但是,它与Tomcat或将应用程序部署到Tomcat实例无关。它不会直接为Tomcat提供任何库。
要使Tomcat使用任何库,至少有以下两个选项:
- 您可以在
war
打包项目中将它们添加为依赖项。所以,如果你已经部署了一个WAR,你的pom.xml
可能有问题,但Tomcat似乎找不到这个库。 - 如其他答案所示,您可以手动将依赖项复制到
tomcat/lib
目录,并在POM<scope>provided</scope>
中创建依赖项,以防止将这些依赖项打包到WAR。
如果您不希望在开发过程中每隔5分钟部署一次单片(比方说100MB),那么后一种选择可能是明智的,如果通过网络进行的话。
如果你把你的.jar
文件放到你的tomcat文件夹lib
中,它就会像魅力一样!
以上是关于Maven:java.lang.NoClassDefFoundErrorexception,但是jars是在.m2中下载的的主要内容,如果未能解决你的问题,请参考以下文章
“Ionic cordova build android”错误
当我在 Eclipse 中运行 hadoop 作业时出现异常