2013-03-04 16 views
5

Próbuję debugować (F11 na Eclipse) aplikację GUI java, którą odziedziczyłem, ale podczas gdy aplikacja działa dobrze (bez małej poprawki, którą muszę zastosować) poza środowiskiem IDE Eclipse, produkuje następujący wyjątek, gdy uruchomiony z Eclipse (albo F11 lub Ctrl + F11):ClassNotFoundException: org.dom4j.DocumentException

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/dom4j/DocumentException 
    at com.example.myapp.LoginWindow.buildHibernateConfig(LoginWindow.java:178) 
    at com.example.myapp.LoginWindow.actionPerformed(LoginWindow.java:141) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357) 
    at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:191) 
    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1639) 
    at javax.swing.JComponent.processKeyBinding(JComponent.java:2859) 
    at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267) 
    at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:216) 
    at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2936) 
    at javax.swing.JComponent.processKeyBindings(JComponent.java:2928) 
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2822) 
    at java.awt.Component.processEvent(Component.java:6074) 
    at java.awt.Container.processEvent(Container.java:2039) 
    at java.awt.Component.dispatchEventImpl(Component.java:4660) 
    at java.awt.Container.dispatchEventImpl(Container.java:2097) 
    at java.awt.Component.dispatchEvent(Component.java:4488) 
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1856) 
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:722) 
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1000) 
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:865) 
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:686) 
    at java.awt.Component.dispatchEventImpl(Component.java:4532) 
    at java.awt.Container.dispatchEventImpl(Container.java:2097) 
    at java.awt.Window.dispatchEventImpl(Window.java:2489) 
    at java.awt.Component.dispatchEvent(Component.java:4488) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668) 
    at java.awt.EventQueue.access$400(EventQueue.java:81) 
    at java.awt.EventQueue$2.run(EventQueue.java:627) 
    at java.awt.EventQueue$2.run(EventQueue.java:625) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
    at java.awt.EventQueue$3.run(EventQueue.java:641) 
    at java.awt.EventQueue$3.run(EventQueue.java:639) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:638) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 47 more 

Mój początkowy wyszukiwania na ten stwierdził, że the dom4j library may be missing ale dodanie go do pom.xml:

<dependency> 
     <groupId>net.sourceforge.saxon</groupId> 
     <artifactId>saxon</artifactId> 
     <version>9.1.0.8</version> 
    </dependency>   
    <dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    </dependencies> 

Did nie rozwiązać t on problem.

Każdy pomysł, dlaczego otrzymuję ten wyjątek (tylko przy uruchamianiu z Eclipse) i jak rozwiązać ten problem?

BTW, zależność saxson została dodana tylko dlatego, że próba użycia the latest dom4j spowodowała nierozwiązane zależności podczas budowania. Ale odkąd zdegradowany do dom4j 1.6.1 mogę wyeliminować zależność Saskiego więc plik pom.xml zawiera tylko teraz:

<dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    </dependencies> 
+1

Czy to projekt Maven m2e, czy prosty projekt java w czasie zaćmienia? – anoopelias

+0

@anoopelias Tak, to * jest * projektem Maven m2e. Ma ** ** problemy z pobieraniem zależności i budowaniem z nią. Dziwne. – Withheld

+0

Jeśli masz kilka innych zależności, możesz spróbować zmienić kolejność eksportu w środowisku Eclipse. Przenieś dom4j na listę, aby nie mieć innej zależności, która obejmuje starszą wersję Dom4j. – jontejj

Odpowiedz

1

pójdę do „debug” widok Eclipse i uzyskać rzeczywiste polecenie Eclipse używa do uruchomienia twój program. Powinieneś zawiesić program zaraz po uruchomieniu, a następnie kliknąć prawym przyciskiem myszy linię SECOND w widoku "debugowanie", a następnie wybrać właściwości. Pojawi się okno o nazwie "właściwości procesu", z którego można skopiować polecenie wygenerowane przez Eclipse, aby uruchomić program. Możesz wkleić polecenie do terminala, a następnie zobaczyć, jak Java rozwiązuje ścieżkę klas. Sprawdź, które słoiki są faktycznie ładowane przez dodanie parametru -verbose.

EDIT - Wystarczy, aby było jasne, kiedy mówię „Widok debug” Znaczy

"Main Menu"->"Window"->"Show View"->"Debug" 
2

Bro, trzeba importować wszystkie pliki jar do uruchamiania program.These są obowiązkowe do prowadzenia projektu

POI-3,10-Final.jar

POI-OOXML-3,10-Final.jar

POI-OOXML-schematy-3.10.jar

Xmlbeans-2.30.jar

Powiązane problemy