java程序出现classnotfoundexception_我的Java Web应用程序中的ClassNotFoundException / NoClassDefFoundError...

小编典典

这是什么意思?

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

forName课堂教学中的方法Class。

findSystemClass课堂教学中的方法ClassLoader。

loadClass课堂教学中的方法ClassLoader。

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

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

String jdbcDriver = "...'; //name of your driver

Class.forName(jdbcDriver);

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

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

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

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

我该如何解决?

在Java Web应用程序中,您的应用程序使用的所有第三方库都必须位于WEB-INF /

lib文件夹中。确保将所有必需的库(jar)放置在此处。您可以轻松检查以下内容:

-

- WEB-INF

- lib

+ jar1

+ jar2

+ ...

- META-INF

-

对于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:/ lib

JBoss 7 / Wildfly:/ standalone / lib

2020-09-08

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值