96 Stimmen

Fehlersuche in Maven?

Ist es möglich, einen Debugger wie jdb von Maven aus zu starten? Ich habe eine pom.xml Datei, die das Projekt erfolgreich kompiliert. Allerdings bleibt das Programm irgendwo hängen und ich würde gerne jdb oder einen entsprechenden Debugger starten, um zu sehen, was passiert.

Ich kompiliere mit mvn compile und starten Sie damit:

mvn exec:java -Dexec.mainClass="com.mycompany.app.App"

Ich hatte etwas erwartet wie:

mvn exec:jdb -Dexec.mainClass="com.mycompany.app.App"

um den Debugger zu starten, aber wie üblich sind meine Erwartungen nicht mit der Philosophie von Maven vereinbar.

Außerdem konnte ich keine Dokumentation (auf der Maven-Website oder bei Google) finden, die beschreibt, wie das Debugging funktioniert. Ich vermute, dass ich ein Plugin verwenden muss.

6voto

Chee Loong Soon Punkte 3461

Wenn Sie nicht von der IDE abhängig sein wollen und direkt mit der Kommandozeile arbeiten wollen, können Sie 'jdb' (Java Debugger) verwenden

Wie von Samuel erwähnt, mit einer kleinen Änderung (setzen Sie suspend=y anstelle von suspend=n, y bedeutet ja, was das Programm unterbricht und nicht ausführt, so dass Sie Haltepunkte setzen können, um es zu debuggen, wenn suspend=n bedeutet, dass das Programm zu Ende ausgeführt werden kann, bevor Sie es debuggen können)

Führen Sie in dem Verzeichnis, das Ihre pom.xml enthält, aus:

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044 com.mycompany.app.App"

Öffnen Sie dann ein neues Terminal und führen Sie aus:

jdb -attach 1044

Sie können dann jdb verwenden, um Ihr Programm zu debuggen!=)

Fuentes: Java jdb remote debugging Befehlszeilentool

3voto

Brian Agnew Punkte 260470

Warum nicht die JPDA und von einem separaten Debugger-Prozess an den gestarteten Prozess anhängen? Sie sollten in der Lage sein, die entsprechenden Optionen in Maven anzugeben, um Ihren Prozess mit aktivierten Debugging-Hooks zu starten. Dieser Artikel hat weitere Informationen.

3voto

flurdy Punkte 3592

Ich verwende die Option MAVEN_OPTS und finde es nützlich, suspend auf "suspend=y" zu setzen, da meine exec:java-Programme in der Regel kleine Generatoren sind, die beendet sind, bevor ich einen Debugger anschließen kann.... :) Bei aktiviertem Suspend wartet das Programm, bis ein Debugger angeschlossen ist, bevor es weiterläuft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X