Как отлаживать 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 решены. Это не так сложно, как я думал. Следующий шаг решит мои проблемы:

  1. клонировать проект git clone https://github.com/buschmais/jqa-maven-plugin.git и оформить стабильную версию, например git checkout -b 1.2.0
  2. Импортировать jqassistant-maven-plugin в ваше рабочее пространство затмения.
  3. Подготовьте конфигурацию maven-run и добавьте -Xdebug -Xnoagent -Djava.compile=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 как ВМ-Аргументы.
  4. Создать отладочную конфигурацию для Remote Java Application и выберите как Projectjqassistant-maven-plugin, Задавать Connection Properties в localhost а также 5005
  5. Установить точку останова в ScannerImpl в методе сканирования. Далее хорошими кандидатами являются ClassFileScannerPlugin а также ClassVisitor,
  6. Запустите конфигурацию запуска maven, а затем запустите конфигурацию отладки.

Теперь вы можете легко отлаживать код. К сожалению, многие шаблоны посетителей затрудняют понимание того, как это работает.

На основании моего анализа могу сказать, что анализируются только файлы в классах и тест-классах. Все классы из библиотеки поступают в базу данных только по ссылке. Я думаю, что org.objectweb.asm.ClassReader не просто игнорирует ссылки, которых нет в пути к классам. Это причина, почему версия командной строки не находит так много элементов.

Другие вопросы по тегам