Как я могу проверить архетип 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


Я думаю, что это будет сценарий для сервера непрерывной интеграции, как Гудзон.

ты определись задание

  1. опорожняет каталог (скрипт)
  2. создает новый проект на основе архетипа (mvn archetype:generate)
  3. запускает проект (пакет mvn)

при этом мог бы вероятно, как-то вписаться в один жизненный цикл maven, это было бы похоже на ужасный беспорядок. Использовать CI вместо.


Я вижу архетип: цель интеграционного теста, но он, похоже, не делает то, что я хочу.

Если я правильно понял что вы хотите,archetype:integration-test цель кажется очень хорошим решением:

выполнить интеграцию архетипов испытания, состоящие из создания проект из текущего архетипа с определенными свойствами и необязательно сравнение с эталонной копией. Это состоит из каталог src/test / ресурсы/проекты содержащий:

  • цель.txt (контент фактически не используется, но будущая версия должна интерпретировать его как цель, чтобы работать против сгенерированных проект: см. архетип-334),
  • архетип.свойства со свойствами для генерации проекта,
  • необязательная ссылка / каталог, содержащий справочную копию ожидаемый проект, созданный из IT.

по выше описание, эта цель позволяет точно запустить интеграционный тест(Ы), чтобы проверить проект, сгенерированный с текущим архетипом против ожидаемого результата, и это выглядит как чистый, простой, автономный способ тестирования архетипа.

почему этот подход не удовлетворяет? Что я пропустил?