gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:23:08 27 4
gpt4 key购买 nike

我使用 Java 开发了一个网络应用程序。当我将它部署到我的应用程序服务器(Jetty、Tomcat、JBoss、GlassFish 等)时抛出错误。我可以在堆栈跟踪中看到此错误消息:

java.lang.ClassNotFoundException

或者

java.lang.NoClassDefFoundError

这是什么意思,我该如何解决?

最佳答案

What does this mean?

首先,让我们看看 java.lang.ClassNotFoundException 的含义:

Thrown when an application tries to load in a class through its string name using:

  • The forName method in class Class.
  • The findSystemClass method in class ClassLoader.
  • The loadClass method in class ClassLoader.

but no definition for the class with the specified name could be found.

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

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

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

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

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

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


how can I fix it?

在 Java 网络应用程序中,您的应用程序使用的所有第三方库都必须放在 WEB-INF/lib 文件夹中。确保所有必要的库( jar )都放在那里。您可以轻松检查:

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

此问题通常出现在 JDBC 连接 jar(MySQL、Derby、MSSQL、Oracle 等)或 Web MVC 框架库(如 JSF 或 Spring MVC)中。

考虑到一些第三方库依赖于其他第三方库,所以你必须在WEB-INF/lib中添加所有才能使申请工作。一个很好的例子是 RichFaces 4 库,where you have to download and add the external libraries manually .


注意 Maven用户:除非将库设置为 provided,否则不应遇到这些问题, testsystem .如果设置为 provided ,您负责将库添加到类路径中的某处。您可以在此处找到有关依赖范围的更多信息:Introduction to the Dependency Mechanism


如果库必须在将部署在您的应用程序服务器上的多个应用程序之间共享,例如对于两个应用程序的 MySQL 连接器,还有另一种选择。不要部署两个 war 文件,每个文件都有自己的 MySQL 连接器库,而是将此库放在服务器应用程序的公共(public)库文件夹中,这将使该库位于所有已部署应用程序的类路径中。

此文件夹因应用程序服务器而异。

  • Tomcat 7/8:<tomcat_home>/图书馆
  • JBoss 7/Wildfly:<jboss_home>/独立/库

关于java - 我的 Java Web 应用程序中的 ClassNotFoundException/NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23905333/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com