Как я могу проверить созданный мавен архетип? - PullRequest
16 голосов
/ 03 ноября 2010

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

Мне нужна фаза сборки архетипа, которая принимает только что созданный архетип, запускает mvn archetype:generate на нем, а затем запускает mvn verify на сгенерированном коде, чтобы убедиться, что сгенерированный код действительно в порядке. Если понадобится, я напишу свой собственный mojo, чтобы сделать это, но хотел посмотреть, существует ли уже решение. Я вижу цель archetype:integration-test, но, кажется, не делает то, что я хочу.

Ответы [ 6 ]

14 голосов
/ 20 сентября 2013

ОБНОВЛЕНИЕ 2013: теперь это намного проще, чем предлагают другие ответы.

https://issues.apache.org/jira/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выполнение с использованием кода выше.)

3 голосов
/ 21 января 2011

Помимо подхода с использованием 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

2 голосов
/ 30 марта 2015

Я сам немного боролся с этим и решил, что при использовании текущего v2.3 из плагина maven-archetype-plugin, в дополнение к src / test / resources / projects / first / goal.txt, также необходимоsrc / test / resources / projects / first / archetype.properties, содержащий что-то вроде этого:

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

Этот запрос на извлечение иллюстрирует полный рабочий пример.

1 голос
/ 04 ноября 2010

Чтобы ответить на мой собственный вопрос, «официальная» функция находится в разработке:

http://jira.codehaus.org/browse/ARCHETYPE-334

В то же время, эта ссылка предоставляет обходной путь, используя maven-invoker-plugin:

http://maven.40175.n5.nabble.com/unit-testing-archetypes-td75257.html#a75257

0 голосов
/ 03 ноября 2010

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

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

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

  • goal.txt (контент на самом деле не используется, но будущая версия должна его интерпретировать как цель, чтобы бежать против сгенерированного проект: см. АРХЕТИПА-334),
  • archetype.properties со свойствами для генерации проекта,
  • необязательный справочник / каталог, содержащий справочную копию Ожидаемый проект создан из IT.

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

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

0 голосов
/ 03 ноября 2010

Полагаю, это будет сценарий для сервера непрерывной интеграции, например hudson .

Вы бы определили работу, которая

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

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

...