栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError

这是什么意思?

首先,让我们看一下

java.lang.ClassNotFoundException

当应用程序尝试使用其字符串名称通过其字符串名称加载类时抛出:

  • forName
    课堂教学中的方法
    Class
  • findSystemClass
    课堂教学中的方法
    ClassLoader
  • loadClass
    课堂教学中的方法
    ClassLoader


但是找不到具有指定名称的类的定义。

通常,尝试以这种形式手动打开连接时会发生这种情况:

String jdbcDriver = "...'; //name of your driverClass.forName(jdbcDriver);

或者,当您引用属于外部库的类时, 奇怪的 是,当应用程序服务器尝试部署应用程序时,无法加载该类。

让我们来看看

java.lang.NoClassDefFoundError
(强调我的)的含义:

如果Java虚拟机或

ClassLoader
实例尝试加载类的定义(作为常规方法调用的一部分或使用新表达式创建新实例的一部分)而抛出,则找不到该类的定义。

当前编译的类在编译时就存在搜索到的类定义,但是不再可以找到该定义

最后一部分说明了一切:该类在编译时即存在,即当我通过IDE编译应用程序时存在,但在运行时即部署应用程序时不可用。


我该如何解决?

在Java Web应用程序中,您的应用程序使用的所有第三方库都必须位于WEB-INF /
lib文件夹中。确保将所有必需的库(jar)放置在此处。您可以轻松检查以下内容:

- <webapp folder>  - WEB-INF    - lib      + jar1      + jar2      + ...  - meta-INF  - <rest of your folders>

对于JDBC连接罐(MySQL,Derby,MSSQL,Oracle等)或Web MVC框架库(如JSF或Spring MVC),通常会出现此问题。

考虑到某些第三方库依赖于 其他 第三方库,因此必须将 它们全部 添加到WEB-INF / lib中才能使应用程序正常工作。RichFaces
4库就是一个很好的例子,您必须在其中手动下载和添加外部库。


Maven用户注意事项:除非将库设置为或

provided
,否则不应遇到这些问题。如果设置为,则负责将库添加到类路径中的某处。您可以在此处找到有关依赖范围的更多信息:依赖机制简介
test``system``provided


如果必须在将要部署在您的应用程序服务器上的多个应用程序之间共享该库,例如用于两个应用程序的MySQL连接器,则还有另一种选择。无需将两个war文件分别使用各自的MySQL连接器库进行部署,而是将该库放置在服务器应用程序的公共库文件夹中,这将使该库位于所有已部署应用程序的类路径中。

此文件夹与应用程序服务器不同。

  • Tomcat 7/8:
    <tomcat_home>
    / lib
  • JBoss 7 / Wildfly:
    <jboss_home>
    / standalone / lib


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号