Как отлаживать jQassistant в Eclipse
Я хочу понять процесс сканирования jqassistant в деталях. Например, он будет сканировать все Jar-файлы и все классы или только тот, на который я непосредственно ссылаюсь из своих классов. Чтобы ответить на такие вопросы, отладка часто является хорошим вариантом. Как обычно, вы запускаете jqassistant как плагин maven. Отладить плагин Maven не так просто. Поэтому я подумал, что лучше проверить клиент командной строки. Отладка работает нормально, но, к сожалению, я получаю совершенно другой результат. Вот мой параметр scan --files ${project_loc:/sze}/target/classes,${project_loc:/sze}/target/test-classes --storeDirectory c:/trash/neo4j
, Вывод такой же, как в maven-build, он сканирует 441, а затем 106 классов.
Кто-нибудь может дать мне подсказку, что не так с командной строкой вызова? Или как лучше всего ответить на вопрос с самого начала.
1 ответ
Я думаю, что лучший вариант - отладить плагин maven, потому что тогда все проблемы с конфигурацией и classpath решены. Это не так сложно, как я думал. Следующий шаг решит мои проблемы:
- клонировать проект
git clone https://github.com/buschmais/jqa-maven-plugin.git
и оформить стабильную версию, напримерgit checkout -b 1.2.0
- Импортировать
jqassistant-maven-plugin
в ваше рабочее пространство затмения. - Подготовьте конфигурацию maven-run и добавьте
-Xdebug -Xnoagent -Djava.compile=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
как ВМ-Аргументы. - Создать отладочную конфигурацию для
Remote Java Application
и выберите какProject
jqassistant-maven-plugin
, ЗадаватьConnection Properties
вlocalhost
а также5005
- Установить точку останова в
ScannerImpl
в методе сканирования. Далее хорошими кандидатами являютсяClassFileScannerPlugin
а такжеClassVisitor
, - Запустите конфигурацию запуска maven, а затем запустите конфигурацию отладки.
Теперь вы можете легко отлаживать код. К сожалению, многие шаблоны посетителей затрудняют понимание того, как это работает.
На основании моего анализа могу сказать, что анализируются только файлы в классах и тест-классах. Все классы из библиотеки поступают в базу данных только по ссылке. Я думаю, что org.objectweb.asm.ClassReader
не просто игнорирует ссылки, которых нет в пути к классам. Это причина, почему версия командной строки не находит так много элементов.