Как я могу проверить архетип maven, который я только что создал?
Я создал несколько архетипов для проекта, который отлично работает сейчас, но я хотел бы иметь возможность проверить, что код, созданный из архетипов, продолжает работать в будущем.
что я хотел бы, это фаза сборки архетипа, которая принимает только что созданный архетип, запускает mvn archetype:generate
на нем, а затем бежит mvn verify
на сгенерированном коде, чтобы убедиться, что сгенерированный код на самом деле в порядке. Если нужно, я напишу свой собственный Моджо, чтобы сделать это, но хотел бы увидеть, если решение уже существует. Я вижу archetype:integration-test
цель, но это не кажется чтобы делать то, что я хочу.
6 ответов
обновление 2013: теперь это намного проще, чем предполагают другие ответы.
http://jira.codehaus.org/browse/ARCHETYPE-334 было завершено в августе 2011
использовать, просто поместите слово install
внутри goal.txt
файл, упомянутый выше, и тесты из проекта, который вы архетипируете, будут вызваны как часть обычной сборки. (И/или verify
в случае OP.)
однако, если вы новичок в создании архетипов известно, что этот популярный мини-справочник устарел, и, хотя он будет работать для создания архетипа, он будет не работа для запуска тестов интеграции архетипов. Вместо этого вы должны создать archetype-metadata.xml
файл, как описано здесь. (Это намного приятнее для работы, так как он использует наборы файлов!)
также обратите внимание, что эти интеграционные тесты не отвечают на -DskipTests
но это можно исправить следующим образом:
<build>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.2</version>
<configuration>
<skip>${skipTests}</skip>
</configuration>
</plugin>
</plugins>
</build>
(хотя это выглядит как он пропускает весь плагин, он на самом деле работает, вероятно, потому, что он возвращается к устаревшему режиму; в то время как я не мог найти никакого успешного способа пропустить только integration-test
выполнение цели с помощью кода выше.)
помимо подхода использования Maven-invoker-plugin, мы используем другой подход. С помощью Maven Verifier вы можете легко проверить свои плагины и архетипы maven. Просто добавьте следующую зависимость в pom вашего тестового проекта maven:
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-verifier</artifactId>
<version>1.2</version>
</dependency>
теперь вы можете использовать
org.apache.maven.it.Verifier
в ваши обычные тесты JUnit. С помощью верификатора вы можете запускать цели maven и некоторые утверждения о результате. Для полного примера просто проверьте интеграционный тест Maven модулей нашего javascript-архетипов: https://github.com/akquinet/javascript-archetypes
Я немного боролся с этим сам и понял, что при использовании текущего v2.3 из maven-archetype-plugin, в дополнение к src/test/resources/projects/first / goal.txt, также нужен src/test/resources/projects/first / archetype.свойства, содержащие что-то вроде этого:
sourceEncoding=UTF-8
groupId=integrationtest.group
artifactId=integrationtest.artifactId
version=1.0.0-SNAPSHOT
package=org.eclipse.xtend.xtend-archetype.integrationtest
packageInPathFormat=org/eclipse/xtend/xtend-archetype/integrationtest
этот запрос тянуть иллюстрирует полный рабочий пример.
чтобы ответить на мой собственный вопрос, "официальная" функция находится в разработке:
http://jira.codehaus.org/browse/ARCHETYPE-334
тем временем, эта ссылка предоставляет обходной путь с помощью Maven-invoker-plugin:
http://maven.40175.n5.nabble.com/unit-testing-archetypes-td75257.html#a75257
Я думаю, что это будет сценарий для сервера непрерывной интеграции, как Гудзон.
ты определись задание
- опорожняет каталог (скрипт)
- создает новый проект на основе архетипа (mvn archetype:generate)
- запускает проект (пакет mvn)
при этом мог бы вероятно, как-то вписаться в один жизненный цикл maven, это было бы похоже на ужасный беспорядок. Использовать CI вместо.
Я вижу архетип: цель интеграционного теста, но он, похоже, не делает то, что я хочу.
Если я правильно понял что вы хотите,archetype:integration-test
цель кажется очень хорошим решением:
выполнить интеграцию архетипов испытания, состоящие из создания проект из текущего архетипа с определенными свойствами и необязательно сравнение с эталонной копией. Это состоит из каталог src/test / ресурсы/проекты содержащий:
- цель.txt (контент фактически не используется, но будущая версия должна интерпретировать его как цель, чтобы работать против сгенерированных проект: см. архетип-334),
- архетип.свойства со свойствами для генерации проекта,
- необязательная ссылка / каталог, содержащий справочную копию ожидаемый проект, созданный из IT.
по выше описание, эта цель позволяет точно запустить интеграционный тест(Ы), чтобы проверить проект, сгенерированный с текущим архетипом против ожидаемого результата, и это выглядит как чистый, простой, автономный способ тестирования архетипа.
почему этот подход не удовлетворяет? Что я пропустил?