2015-09-01 2 views
0

Я знаю, что это обсуждалось много, но почему-то ни один из ранее заданных вопросов не применим к моему делу. При загрузке моего приложения я получаю следующую трассировку стека:NoClassDefFoundError: DataAccessException с использованием пружины

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 

В большинстве нитей я читал относительно подобных ошибок люди действительно не хватает весенне-ТХ баночку, которую я определенно don't. Она объявлена ​​в моих зависимости Maven вместе с другими весенними банками neededd так:

 <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> 

При исследовании моего развернутого вывода, что банки находятся там. Тем не менее указанная ошибка бросается. Я действительно в отчаянии с этим. Обратите внимание, что приложение не является WebApp, а представляет собой отдельное приложение, загруженное из другой программы.

Смешно, что мой коллега не может воспроизвести ошибку. По этой причине я предполагаю, что это какой-то гоночный статус между загрузчиком JavaFX, загружающим результат запроса spring-jdbc в его datamodel. У меня нет никаких доказательств для этого, это всего лишь инстинкт кишки. Любая помощь или tipp были бы действительно оценены. Если необходима дополнительная информация, пожалуйста, дайте мне знать.

+0

0 Как у вас? Это почти наверняка будет проблемой класса. – Max

+1

попытайтесь добавить [spring-dao] (http://mvnrepository.com/artifact/org.springframework/spring-dao/2.0.3) к вашему pom.xml – drgPP

+0

Я загружаю свой JavaFXApp с помощью FXMLLoader, который затем имеет ссылку его контроллера, как это: 'FX: контроллер = "foo.bar.Controller"' , который в свою очередь загружает шаблон весна: JDBC 'this.jdbcTemplate = новый JdbcTemplate (DatabaseConnectionFactory.getDataSource (система)) ; ' – Wingie

ответ

0

Класс: org.springframework.dao.DataAccessException определен весной-DAO. Проверьте, есть ли зависимость ниже.

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

Это сделало трюк сейчас, хотя я мог бы поклясться, что пробовал это раньше с другими баночками в версии 4.1.7. Что действительно меня смущает, так это то, что spring-tx.jar также содержит класс DataAccessException. Также я не уверен, почему maven не загружает это как зависимость при создании приложения. Почему мой коллега не может воспроизвести ошибку, используя те же настройки? – Wingie

+0

Отмечено как правильный ответ. – Wingie

+0

@Wingie .. Я не уверен, как он работает для вашего коллеги. Поскольку maven автоматически загружает все зависимые библиотеки для ваших зависимостей, поэтому Spring-dao может быть загружен в вашем случае коллег, а не в вашем. Но это странно. – Garry

Смежные вопросы