2017-02-28 12 views
1

Ich möchte den Scan-Prozess von jqassistant im Detail verstehen. Zum Beispiel scannt es alle Jar-Dateien und alle Klassen oder nur die, die ich direkt aus meinen Klassen referenziere. Um solche Fragen zu beantworten, ist das Debuggen oft eine gute Option. Wie auch immer, normalerweise starten Sie jqassistant als Maven Plugin. Debug maven plugin ist nicht so einfach. Also dachte ich, es ist besser, den Kommandozeilen-Client auszuprobieren. Debugging funktioniert gut, aber leider bekomme ich ein komplett anderes Ergebnis. Hier sind meine Parameter scan --files ${project_loc:/sze}/target/classes,${project_loc:/sze}/target/test-classes --storeDirectory c:/trash/neo4j. Die Ausgabe ist die gleiche wie im maven-build, es werden 441 und dann 106 Klassen gescannt.Debuggen von jQassistant in Eclipse

Kann mir jemand einen Hinweis geben, was ist mit dem Kommandozeilen-Aufruf falsch? Oder was wäre die beste Lösung, um die Frage von Anfang an zu beantworten.

Antwort

1

Ich denke die beste Option ist das Debuggen des Maven-Plugins, weil dann alle Konfigurations- und Klassenpfadprobleme gelöst sind. Das ist nicht so kompliziert wie ich dachte. Der folgende Schritt meiner Probleme lösen:

  1. Klon das Projekt git clone https://github.com/buschmais/jqa-maven-plugin.git und eine stabile Version Kasse, zum Beispiel git checkout -b 1.2.0
  2. Imports jqassistant-maven-plugin in der Eclipse-Workspace.
  3. Bereiten Sie Ihre maven-run-Konfiguration vor und fügen Sie -Xdebug -Xnoagent -Djava.compile=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 als VM-Argumente hinzu.
  4. Erstellen Sie eine Debug-Konfiguration für Remote Java Application und wählen Sie Projectjqassistant-maven-plugin. Set Connection Properties bis localhost und 5005
  5. Setzen Sie einen Breakpoint in ScannerImpl in methode Scan. Weitere gute Kandidaten sind die ClassFileScannerPlugin und ClassVisitor.
  6. Starten Sie die Maven-Run-Konfiguration und starten Sie dann die Debug-Konfiguration.

Jetzt können Sie den Code leicht debuggen. Leider machen viele Besuchermuster es schwierig zu verstehen, wie es funktioniert.

Basierend auf meiner Analyse kann ich sagen, dass nur Dateien in Klassen und Testklassen analysiert werden. Alle Klassen aus der Bibliothek kommen nur über Referenz in die Datenbank. Ich nehme an, dass die org.objectweb.asm.ClassReader Referenzen nicht ignoriert, die nicht im Klassenpfad sind. Dies ist der Grund, warum die Kommandozeilenversion nicht so viele Elemente findet.

+0

Das Maven-Plugin entscheidet, welche Elemente gescannt werden. Standardmäßig sind dies die Klassenordner für die Haupt- und Testartefakte. Das ClassFileScannerPlugin wird für jede .class-Datei in diesen Ordnern ausgelöst. Zusätzlich ermöglicht die scanIncludes-Option das Hinzufügen weiterer Dateien (z. B. zusätzliche src/main/folders), die hinzugefügt werden sollen. Es gibt eine Idee, den gesamten Dateiinhalt eines Maven-Moduls als Standard zu scannen, aber dies wäre eine Feature-Anfrage. –

Verwandte Themen