2013-03-04 6 views
5

Sto cercando di eseguire il debug (F11 su Eclipse) di un'applicazione GUI java che ho ereditato ma mentre l'applicazione funziona correttamente (meno una piccola correzione che devo applicare) al di fuori dell'IDE di Eclipse, produce la seguente eccezione quando lanciato da Eclipse (o F11 o 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 

la mia ricerca iniziale su questo ha trovato che the dom4j library may be missing ma aggiungendo alla 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> 

Forse non risolvere t lui problema.

Qualche idea del motivo per cui ricevo questa eccezione (solo all'avvio da Eclipse) e come risolvere questo problema?

BTW, la dipendenza saxson è stata aggiunta solo perché il tentativo di utilizzare the latest dom4j ha provocato dipendenze non risolte durante la creazione. Ma da quando ho declassato a dom4j 1.6.1 ho potuto eliminare la dipendenza saxon modo che il file pom.xml contiene solo ora:

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

È un progetto Maven m2e o un semplice progetto java in eclissi? – anoopelias

+0

@anoopelias Sì, è * un * progetto Maven m2e. Ha ** no ** problemi di download della dipendenza e di costruzione con esso. Strano. – Withheld

+0

Se si hanno diverse altre dipendenze, è possibile provare a modificare l'ordine di esportazione in eclissi. Sposta dom4j sull'elenco in modo da non avere un'altra dipendenza che include una versione precedente di Dom4j. – jontejj

risposta

1

vorrei andare al "debug" Vista Eclipse e ottenere il comando effettivo che Eclipse sta usando per l'esecuzione il tuo programma È necessario sospendere il programma non appena viene avviato, quindi fare clic con il pulsante destro del mouse sulla riga SECOND nella visualizzazione "debug", quindi selezionare Proprietà. Verrà visualizzata una finestra denominata "proprietà del processo" da cui è possibile copiare il comando generato da Eclipse per eseguire il programma. È possibile incollare il comando in un terminale e quindi vedere come Java risolve il classpath. Scopri quali jar vengono effettivamente caricati aggiungendo il parametro -verbose.

EDIT - Giusto per chiarire, quando dico "vista di debug" intendo

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

Bro, è necessario importare tutti i file jar per eseguire le program.These sono obbligatori per l'esecuzione del progetto

Poi-3.10-Final.jar

Poi-OOXML-3.10-Final.jar

PDI-OOXML-schemas-3.10.jar

Xmlbeans-2.30.jar