Я являюсь автором одного из плагинов Maven (а не Apache/Codehaus, полностью инди). Иногда я получаю запросы поддержки или тестовые примеры, когда мне действительно нужно отлаживать выполнение моего плагина с существующим pom.xml. В основном тестовые примеры, которые я получаю, представляют собой образец/тестовый проект (pom.xml с src/main/resoures, src/main/java и т.д.).
Мне нужен способ:
- Загрузите существующий
pom.xml. - Найти конкретное выполнение моего плагина там (обычно это единственный).
- Получить экземпляр
MyMojo- полностью инициализированный /condigured, со всеми компонентами и параметрами, которые были введены непосредственно. - Выполнить
MyMojo. - Что важно, что тестовые проекты представляют собой отдельные проекты, я не хочу их копировать в модуль Maven моего плагина.
- Я бы хотел сделать это без удаленной отладки.
Отладка Я имею в виду, чтобы иметь возможность устанавливать и останавливать точки останова (также условные), входить/выходить/завершать исходный код.
В идеале я хотел бы иметь возможность executeMyMojoFrom(new File("pom.xml")) - например, в тесте JUnit или методе main для некоторого класса. (Я могу предоставить groupId, artifactId и т.д. Все остальные определения должны быть загружены только из этого pom.xml.)
Как я могу достичь этого?
Что я пробовал до сих пор:
-
Debug As...onpom.xmlв Eclipse - не работает достаточно хорошо (исходный код не найден, точка останова не работает как его не контекст Java-проекта) - Решения Maven Embedder/Invoker - создавать события в отдельных процессах через CLI. Забудьте точки останова, нет отладки.
- Удаленная отладка с помощью
mvnDebug, а затем удаленная отладка из Eclipse, как предложено Pascal Thivent здесь. Это лучший вариант. Однако удаленная отладка означает запускmvnDebugпо отдельности, а также не гарантирует, что JAR файлы, которые у меня есть в Eclipse, точно такие же, что иmvnDebug. Итак, здесь есть определенное расстояние. -
maven-plugin-testing-harness- Я действительно думал, что это выполнит эту задачу. Но сначала я прыгал через обручи в течение нескольких часов, чтобы начать. Все важные зависимости "предоставляются", поэтому я сначала должен был найти правильную комбинацию версий этих артефактов. И тогда - только чтобы обнаружить, чтоAbstractMojoTestCaseработает только в модуле плагина, который вы хотите протестировать. Вероятно, я ошибся, когда подумал, чтоmaven-plugin-testing-harnessявляется тестовым жгутом для плагинов Maven. Кажется, что это тестовый жгут для плагина из этого модуля плагина. Что нелогично, но не помогает моему делу. Я бы хотел проверить свой плагин в других модулях.
Итак, сейчас у меня лучшие результаты с удаленным решением для отладки. Но то, что я ищу, действительно похоже на maven-plugin-testing-harness, но не подключено к модулю плагина. Есть ли у кого-нибудь намек, если такой метод существует где-то в артефактах Maven?
Чтобы быть более конкретным, я хотел бы написать что-то вроде:
public void testSomething()
throws Exception
{
File pom = getTestFile( "pom.xml" );
assertNotNull( pom );
assertTrue( pom.exists() );
MyMojo myMojo = (MyMojo) lookupMojo( "myGroupId", "myArtifactid", ...,
"myGoal", pom );
assertNotNull( myMojo );
myMojo.execute();
...
}
Сравните это с MyMojoTest здесь - это почти там. Следует просто не подключаться к модулю MyMojo Maven (как в maven-plugin-testing-harness).
Обновление
Несколько ответов на вопросы в комментариях:
Вы хотите сказать, что вы не хотите, чтобы такой тестовый класс, т.е.
MyMojoTest, находился внутри того же проекта, что иMyMojo, т.е. ваш проект плагина? Почему это?
Совершенно верно. Я хочу отлаживать выполнение плагина в существующем проекте Maven, я не хочу сначала перенести этот проект в свой проект плагина, чтобы выполнить тест. Я хочу иметь возможность тестировать/отлаживать существующий проект. В идеале мне просто нужно добавить my-maven-plugin-testing зависимость и подкласс MyMojoTest в проекте src/test/jaca. Это было бы хорошим инструментом для отладки исполнения. Перетаскивание целевого проекта в мой проект Mojo - это слишком много накладных расходов - и в основном это не те тесты, которые я хочу сохранить в долгосрочной перспективе. Надеюсь, это ответы, почему.
Во всяком случае, это просто соглашение о сохранении
project-to-test/pom.xmlвнутриsrc/test/resourcesвашего модуля плагина, а не правила...
Моя проблема заключается не в местоположении pom.xml project-to-test, который легко настраивается. Моя трудность заключается в том, что maven-plugin-testing-harness как-то жестко запрограммирован в проекте Mojo. Он использует pom.xml Mojo, ищет другие специальные файлы/дескрипторы в содержащем проекте. Так что я как-то не могу использовать его в проекте без Mojo, или я могу? Это мой вопрос.
И я не уверен, почему
Debug As...не помог вам...
Не уверен, но (1) точки останова не работали и (2) по какой-то причине исходный код не был "прикреплен".