Java NoClassDefFoundError:使用spring的DataAccessException

Java NoClassDefFoundError:使用spring的DataAccessException,java,spring,maven,Java,Spring,Maven,我知道这已经被讨论了很多,但不知何故,之前提出的问题都不适用于我的情况。 加载我的应用程序时,我得到以下stacktrace: Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException at java.lang.Class.getDeclaredConstructors0(Native Method) at

我知道这已经被讨论了很多,但不知何故,之前提出的问题都不适用于我的情况。 加载我的应用程序时,我得到以下stacktrace:

Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2663)
at java.lang.Class.getConstructor0(Class.java:3067)
at java.lang.Class.newInstance(Class.java:408)
at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51)
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:923)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:967)
at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:216)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2701)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2521)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2435)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2403)
at de.festo.rs.windows.FXApplStarter$1.run(FXApplStarter.java:29)
at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292)
at com.sun.javafx.application.PlatformImpl$$Lambda$55/29905907.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl$$Lambda$54/20965065.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102)
at com.sun.glass.ui.win.WinApplication$$Lambda$46/6575340.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataAccessException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 24 more
在我读到的大多数关于类似错误的帖子中,人们确实错过了SpringTX jar,而我肯定没有。 它在我的maven依赖项中与其他spring jar一起声明,如下所示:

        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>

org.springframework
德克萨斯州春季
4.2.0.1发布
org.springframework
春豆
4.2.0.1发布
org.springframework
SpringJDBC
4.2.0.1发布
org.springframework
spring上下文
4.2.0.1发布
当调查我部署的输出时,jar也在那里。 尽管如此,还是抛出了提到的错误。我真的很绝望。 请注意,该应用程序不是WebApp,而是从另一个程序加载的独立应用程序

有趣的是,我的同事无法重现错误。出于这个原因,我猜这是JavaFX加载器将springjdbc查询结果加载到其数据模型之间的某种竞争条件。我没有任何证据,这只是一种本能。 任何帮助或提示都将不胜感激。
如果需要更多信息,请告诉我。

类:
org.springframework.dao.DataAccessException
在Spring dao中定义。检查是否有以下依赖项

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-dao</artifactId>
    <version>2.0.8</version>
</dependency>

org.springframework
春刀
2.0.8

为了解决这个问题,我刚刚将application.java移动到基本包下,就像我创建了groupid
demo.test.activemq
一样,并在
src
文件夹中创建了相同的包名,然后重新启动。它对我很有用。

另一个可能性是,通过类似于
的测试范围隐藏一些依赖项:


org.springframework
德克萨斯州春季
测试

只需删除作用域(或设置默认值:compile)

如何运行代码?这似乎几乎肯定是一个类路径问题。请尝试使用FXMLLoader将我的JavaFXApp加载到您的pom.xmlI中,FXMLLoader对其控制器的引用如下:
fx:controller=“foo.bar.controller”
,然后加载spring jdbc模板:
This.jdbcTemplate=new jdbcTemplate(DatabaseConnectionFactory.getDataSource(系统))
现在就成功了,尽管我可以发誓我以前在版本4.1.7中的其他jar上也尝试过。但真正让我困惑的是,spring-tx.jar还包含DataAccessException类。另外,我也不确定maven在构建应用程序时为什么不将其作为依赖项加载。为什么我的同事不能复制这个使用完全相同的设置时出错?@Wingie..我不确定它对您的同事是如何工作的。因为maven会自动下载您的依赖项的所有依赖项库,所以spring dao可能会在您的同事而不是您的情况下下载。但这很奇怪。这就是为什么我对此如此绝望的原因。当我部署应用程序并启动它时,我得到了错误。当他启动它时(使用我部署的应用程序,而不是他自己的应用程序)它成功了。我甚至让它自己用我的c驱动器运行,而不是用共享来加载文件。出于这个原因,我假设了某种竞争条件。为了再次更新:几天前我删除了spring dao依赖项,运行代码不再有任何问题。这对我来说仍然是个谜。我在这里遇到了同样的问题。我我甚至没有使用spring数据,但我仍然得到了这个错误。我如何解决这个问题?带有
公共静态void Main的
Main.java
必须在某个包中