我有一个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
目录。我做到了,它奏效了。但是,我也希望有一个更永久的解决方案,这样以后就不会再被其他罐子强迫这样做了。
答案 0 :(得分:1)
如果将.jar
文件放入tomcat文件夹lib
,它将像超级按钮一样工作!
答案 1 :(得分:1)
命令mvn install
将编译您的项目库并将其安装到本地存储库。此外,它还将在该.m2/repository
目录下下载并复制所有依赖项。有关mvn install
的更多详细说明,请参见this question。
但是,它与Tomcat无关或与将应用程序部署到Tomcat实例无关。它将不会直接使任何库可用于Tomcat。
要使Tomcat使用任何库,至少有以下两个选项:
您可以将它们作为依赖项添加到war
打包项目中。因此,如果您已经部署了WAR,但Tomcat似乎仍然找不到该库,那么您的pom.xml
中可能会有问题。
按照其他答案的建议,您可以手动将依赖项复制到tomcat/lib
目录中,并在POM <scope>provided</scope>
中创建依赖项,以防止将其打包到WAR中。
如果您不希望通过网络进行整体开发,则每5分钟就要部署一次整体(例如100MB),则后一种选择可能比较明智。