Maven прекратить сборку, если svn устарел
После прочтения множества вопросов SO, а также других сайтов, я все еще не смог точно решить эту проблему.
У нас длинный цикл сборки (10-20 минут), потому что есть много зависимостей. Иногда случается, что вы начинаете сборку со всеми данными до даты, но пока это делается, кто-то вносит новые изменения в удаленный svn.
Я бы хотел, чтобы Maven проверил validate
а также verify
фазы, если svn все еще актуален в основном для всех зависимых проектов.
Я пытался использовать плагин Enforcer и плагин Build number безуспешно. Похоже, что силовик справился бы с задачей, но я не понял, какие правила устанавливать. Плагин номера сборки, с другой стороны, проверяет, нет ли локальных изменений, но я не думаю, что он проверяет удаленные изменения.
Я не думаю, что POM очень уместно для вопроса, но если кому-то это нужно, или по каким-то деталям, пожалуйста, дайте мне знать, и я обновлю его.
2 ответа
Я бы попробовал комбинацию diff-цели maven-scm-plugin и Enforcer.
scm:diff
может быть настроен на запись вывода в файл. Запустите его, когда изменений нет, и посмотрите, насколько велик файл, или, если он вообще генерирует файл, если изменений нет. Затем используйте плагин Enforcer requireFilesDontExist
и / или requireFileSize
правила, чтобы убедиться, что scm:diff
выходной файл - это размер "без изменений", который вы определили. Если оно больше, изменения были зафиксированы во время этой сборки.
После долгих испытаний я нашел другое решение. Это решение предназначено для людей, которые работают с SVN и хотят зафиксировать изменения только после успешной сборки, и им нужно использовать последнюю версию для сборки.
Что это будет делать, так это извлечь номер последней редакции из SVN и обновить рабочую копию. В конце процесса сборки он снова проверит номер ревизии, чтобы убедиться, что никто не внес изменения.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>get-svn-local-revision-before</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<doCheck>false</doCheck>
<doUpdate>true</doUpdate>
<buildNumberPropertyName>buildNumberLocal</buildNumberPropertyName>
<useLastCommittedRevision>true</useLastCommittedRevision>
</configuration>
</execution>
<execution>
<id>get-svn-remote-revision-before</id>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<buildNumberPropertyName>buildNumberRemote</buildNumberPropertyName>
<useLastCommittedRevision>false</useLastCommittedRevision>
</configuration>
</execution>
<!-- Repeat after everything is done -->
<execution>
<id>get-svn-remote-revision-after</id>
<phase>verify</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<buildNumberPropertyName>buildNumberRemote</buildNumberPropertyName>
<useLastCommittedRevision>false</useLastCommittedRevision>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.3.1</version>
<executions>
<execution>
<id>check-svn-revisions-before</id>
<phase>process-test-resources</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<evaluateBeanshell>
<condition>${buildNumberLocal} == ${buildNumberRemote}</condition>
<message>[ERROR] Local build (${buildNumberLocal}) doesn't match remote build (${buildNumberRemote})</message>
</evaluateBeanshell>
</rules>
<fail>true</fail>
</configuration>
</execution>
<!-- Repeat after everything is done -->
<execution>
<id>check-svn-revisions-after</id>
<phase>verify</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<evaluateBeanshell>
<condition>${buildNumberLocal} == ${buildNumberRemote}</condition>
<message>[ERROR] Local build (${buildNumberLocal}) doesn't match remote build (${buildNumberRemote})</message>
</evaluateBeanshell>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>