使用 Tomcat 运行带有外部库的应用程序时出现 NoClassDefFoundError

Posted

技术标签:

【中文标题】使用 Tomcat 运行带有外部库的应用程序时出现 NoClassDefFoundError【英文标题】:NoClassDefFoundError when running app with external lib with Tomcat 【发布时间】:2019-12-11 08:03:22 【问题描述】:

我正在尝试使用 Apache Tomcat 5.5 运行一个项目。由于我没有 pom.xml,并且我需要使用 Json 库,因此我将该特定库添加到 IntelliJ 中的依赖项(项目结构 -> 模块 -> 依赖项)中,具有“编译”范围。我的 IDE 没有显示任何错误或警告,我可以很好地构建项目。但是,当我使用 Apache Tomcat 5.5(配置如下)运行它时

<Context path="/EmblematicaHispanica" docBase="C:\Users\dantelo\IdeaProjects\emblematica-hispanica" debug="0">
<!-- EmblematicaHispanica -->
<Resource
    name="jdbc/J2EE-ExamplesDS"
    auth="Container"
    type="javax.sql.DataSource"
    factory="org.apache.commons.dbcp.BasicDataSourceFactory"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/emblema?useSSL=false"
    username="..."
    password="..."
    maxActive="4"
    maxIdle="2"
    maxWait="10000"
    removeAbandoned="true"
    removeAbandonedTimeout="60"
    logAbandoned="true"
    validationQuery="SELECT 1"/>
</Context>

一切正常,除了我调用使用该库的函数时,我得到以下错误:

java.lang.NoClassDefFoundError: org/json/JSONObject

我一直在寻找解决方案,但到目前为止没有运气

【问题讨论】:

【参考方案1】:

我建议您检查您的 json 库是否存在于您的项目输出路径中(项目结构 -> Artifacts),IntelliJ 在运行时读取项目输出路径中的.class 文件。

【讨论】:

我刚刚修好了,比我想象的要简单【参考方案2】:

我刚刚找到了解决方案。这比我想象的要简单得多。我将库从系统资源管理器复制到 web inf 中的“lib”文件夹,现在它可以工作了!

【讨论】:

以上是关于使用 Tomcat 运行带有外部库的应用程序时出现 NoClassDefFoundError的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Commons Exec 向命令提供多个输入并提取输出时出现问题

IDEA运行 tomcat时出现 Address localhost:8080 is already

IDEA运行 tomcat时出现 Address localhost:8080 is already

将服务引用添加到引用了 JSON.NET 库的项目时出现奇怪的问题

带有分区的外部配置单元表 - 当我添加具有读取访问权限的数据的分区时出现权限错误

使用外部组件时出现 VueJS 错误