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使用任何库,至少有以下两个选项:

  1. 您可以在war打包项目中将它们添加为依赖项。所以,如果你已经部署了一个WAR,你的pom.xml可能有问题,但Tomcat似乎找不到这个库。
  2. 如其他答案所示,您可以手动将依赖项复制到tomcat/lib目录,并在POM <scope>provided</scope>中创建依赖项,以防止将这些依赖项打包到WAR。

如果您不希望在开发过程中每隔5分钟部署一次单片(比方说100MB),那么后一种选择可能是明智的,如果通过网络进行的话。

另一答案

如果你把你的.jar文件放到你的tomcat文件夹lib中,它就会像魅力一样!

以上是关于Maven:java.lang.NoClassDefFoundErrorexception,但是jars是在.m2中下载的的主要内容,如果未能解决你的问题,请参考以下文章

“Ionic cordova build android”错误

当我在 Eclipse 中运行 hadoop 作业时出现异常

Java-Maven:Maven相关的概念:Maven坐标Maven仓库Maven声明周期

Maven

Maven学习笔记

maven install与maven build的区别