2013-08-14 3 views
1

У меня есть необходимость запуска только определенного jUnit, когда выполняется mvn release:prepare. Я не хочу, чтобы это запускалось при установке mvn или любой другой цели, так как этот jUnit предназначен для того, чтобы увидеть, выполнил ли разработчик сначала активность базы данных.maven release: подготовить junit

Есть ли какой-либо способ знать junit по параметру (?), Что выполняемый процесс release:prepare?

Или, есть способ определить в пределах pom.xml, что этот jUnit работает только с этой целью?

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

ответ

1

Я не сделал именно то, что вы хотите, но ключ использовать раздел <executions> под безошибочный:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     ... exclude the test from normal execution ... 
    </configuration> 
    <executions> 
     <execution> 
     <id>release-phase</id> 
     <phase>release-prepare</phase> 
     <goals> 
      <goal>test</goal> 
     </goals> 
     <configuration> 
      ... fill this in to include the tests you want ... 
     </configuration> 
     </execution> 
    </executions> 
<plugin> 

Вы также хотите, чтобы исключить этот тест в нормальном <configuration> разделе.

Существует некоторая сопутствующая информация HERE

+0

Я думаю, я был на правильном пути! :) Я начал строить это, но не знал, как его завершить, или если он будет работать. Большое спасибо за это!!! – Steve

+0

Этот ответ, как написано, не будет работать.См. Мой ответ для более подробного объяснения, но TL; DR нет фазы 'release-подготовки' –

+0

@StephenConnolly Hmmmm. Никаких фаз в выпуске-подготовке. Я полагал, что «релиз-подготовка» был неправильным (обратите внимание на отказ от ответственности), но что существует какая-то фаза, уникальная для выпуска: подготовить ее, чтобы она зависала. Наверное, нет. –

1

Другие близки ... но не сигару.

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

<profiles> 
    <profile> 
    <id>release-preflight-checks</id> 
    <build> 
     <plugins> 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <executions> 
      <execution> 
       <id>release-preflight-checks</id> 
       <goals> 
       <goal>test</goal> 
       </goals> 
       <configuration> 
       .. include your test here 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 
</profiles> 

Затем вам нужно настроить безошибочным по умолчанию не выполнить свой предполетный досмотр

<build> 
    <plugins> 
    ... 
    <plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <configuration> 
     .. exclude your test here 
     </configuration> 
    </plugin> 
    ... 
    </plugins> 
</build> 

И, наконец, вы должны сказать Maven, что этот профиль должен быть активным только во время release:prepare «с раздвоенным исполнением

<build> 
    <plugins> 
    ... 
    <plugin> 
     <artifactId>maven-release-plugin</artifactId> 
     <configuration> 
     ... 
     <preparationGoals>clean verify -P+release-preflight-checks</preparationGoals> 
     ... 
     </configuration> 
    </plugin> 
    ... 
    </plugins> 
</build> 

Примечание: это жизненно важно иметь + перед именем профиля, так что вы добавляете профиль в список активных профилей, иначе ваш шаг release:prepare не будет проверять, что сборка работает с активным профилем выпуска, и вы можете получить последующий release:perform сбой.

Примечание. Менее сложным путем было бы просто включить конфигурацию surefire в профиль выпуска, который вы используете (по умолчанию имеет идентификатор release, но это более подвержено ошибкам, так как вы можете изменить это через родительский pom - например, если вы решите направить свой проект на центральный, sonatype-oss-parent изменит профиль выпуска на sonatype-release - и тогда вы не увидите, что сборка завершилась неудачей, поскольку тест не будет выполнен до тех пор, пока вы не измените свой pom для соответствия новый идентификатор профиля выпуска ... с использованием -P+release-preflight-checks гарантирует, что профиль всегда активен для release:prepare и дополнительно имеет право полностью удовлетворить требования оригинального пользователя, т.е. работает только для release:prepare и не работает для release:perform, который будет иметь место, если исполнение было добавлено в профиль выпуска)

+0

Интересно, пытается ли OP сделать это, чтобы удостовериться, что человек, делающий релиз, что-то сделал с базой данных, связанной с выпуском, и использовал тест junit, а не для проверки кода, но чтобы проверить, соблюден ли этот протокол. Интересно, если это так, то, возможно, было бы легче записать его как вариацию на основе плагина. Сортировка 'maven-is-release-ok-plugin' thingy. –

+0

Ну, так как плагин, скорее всего, не будет размещен самим проектом Apache Maven, его лучше называть 'is-release-ok-maven-plugin', или я буду вынужден отправить сообщение о прекращении и отказе от имени PMC :-( –

+0

Пожалуйста, обратитесь к «виду» в предыдущем сообщении и позвоните адвокатам. :) –

Смежные вопросы