【问题标题】:Unexplained NoClassDefFoundError exception无法解释的 NoClassDefFoundError 异常
【发布时间】:2016-07-13 12:46:34
【问题描述】:

线程“主”java.lang.NoClassDefFoundError 中的异常: org/springframework/jdbc/core/JdbcTemplate 在 com.citi.cate.svn.eers.SVNEERSFeeder.loadEmpInfoFromDB(SVNEERSFeeder.java:117) 在 com.citi.cate.svn.eers.SVNEERSFeeder.process(SVNEERSFeeder.java:523) 在 com.citi.cate.svn.eers.SVNEERSFeeder.main(SVNEERSFeeder.java:631) 在 resources.TheApp.main(TheApp.java:39) 引起:java.lang.ClassNotFoundException: org.springframework.jdbc.core.JdbcTemplate 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 4 更多

我无法找到上述错误的解决方案。最近spring-framework版本发生了变化,我更改了与新版spring-framework相关的所有jar。我看到了上面的错误。试图重新加载所有的罐子。仍然存在错误。请帮助我。

SVNEERSFeeder.java

line 117: JdbcTemplate jt = new JdbcTemplate(_utility.getDBConnection("csi", ""))

【问题讨论】:

  • 生成堆栈跟踪的代码在哪里?

标签: java jdbc


【解决方案1】:

该异常是由于与spring版本相关的适当的spring jdbc jars配置错误引起的。要轻松解决依赖关系,您可以使用 maven: 比如你使用的是spring 4.2.5,在maven中添加spring jdbc dependencies如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>

Apache Ivy 依赖项:

<dependency org="org.springframework" name="spring-jdbc" rev="4.2.5.RELEASE"/>

【讨论】:

  • 感谢您的建议。如果我使用 ANT,你能告诉我解决方案是什么吗?
  • 那么,您是否使用 Apache Ivy 与 Apache Ant 进行依赖管理?
【解决方案2】:

NoClassDefFoundError 异常

如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为正常方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且没有定义可以找到该类。这是当您的代码依赖于一个类文件并且它在编译时存在但在运行时找不到时引起的。

寻找构建时间和运行时类路径的差异。

不过,在您的情况下,根本原因似乎是:

resources.TheApp.main(TheApp.java:39) 引起:java.lang.ClassNotFoundException: org.springframework.jdbc.core.JdbcTemplate at

ClassNotFoundException

这可能是由于您尝试在运行时对类进行反射调用,但程序尝试调用的类不存在。

【讨论】:

  • 你能告诉我找出编译时间和运行时类路径差异的最佳方法是什么。
  • 我发现以下几点很有用——(1)如果你的类C1调用库类L1,而L1调用库类L2,那么C1对L1和L2有运行时依赖,但只有编译对 L1 的时间依赖性。 (2)如果你的类C1使用Class.forName()或其他机制动态实例化一个接口I1,而接口I1的实现类是L1类,那么C1对I1和L1有运行时依赖,但只有编译时对 I1 的依赖。
  • 在 spring-framework 的版本更改后,我附加的外部 jar 中是否可能没有该类?即使附加了外部源文件,它也显示源附件不包含文件 jdbc Template.class 的源代码
猜你喜欢
  • 2021-03-02
  • 2016-04-11
  • 2018-06-23
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2017-01-08
相关资源
最近更新 更多