В любом серьезном maven-проекте вы рано или поздно столкнетесь с двумя вещами - звездным небом над собой и моральным законом в себе. Ой, это из Канта :) Так вот:
- автоматизацией релизов при помощи maven release plugin
- организации свойств проекта и параметров его сборки при помощи maven profile
- или в секции "properties" в pom.xml файлах проекта содержатся все необходимые production-настройки, а локальные settings.xml программистов их, при необходимости, перегружают
- или вы делаете один выделенный production-профиль, который всегда используете только для релизов
<pluginManagement>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
<scmCommentPrefix>MF-69 [maven-release-plugin]</scmCommentPrefix>
<localCheckout>true</localCheckout>
<preparationGoals>
enforcer:enforce clean verify
</preparationGoals>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0.1</version>
<configuration>
<rules>
<AlwaysFail/>
</rules>
<fail>true</fail>
<skip>${maven.enforcer.skip}</skip>
</configuration>
</plugin>
</pluginManagement>
Внимательный взгляд разглядит тут enforcer:enforce в каком-то maven-enforcer-plugin. На самом деле этот плагин предназначен для проверки различных условий (например, обратите внимание на Ban Duplicate Classes), но в данном случае я его использую только как "падать всегда когда разрешено". Поскольку все что мне нужно - это прервать задачу релиза если активирован неверный профиль. Собственно, это все что я хотел рассказать. Вам остается только верно задать свойство "<maven.enforcer.skip/>", в зависмости от того что вам нужно. Лично я в самом "pom.xml" указал его как <maven.enforcer.skip>true</maven.enforcer.skip>
, а вот в локальном профиле в "settings.xml" у меня наоборот - <maven.enforcer.skip>false</maven.enforcer.skip>
и результат получается такой - пока не отключу локальный профиль релиз не проходит - именно то что мне и было нужно. Удачи, берегите себя. И будте добрее
2 comments:
А не проще релизы делать из командной строки, а сборку SNAPSHOT версии делать из IDE, в которой подключены все нужные профили...?
Ну, вероятно, кому-то и проще. Я лишь нашел способ немного обезопастить себя от глупых ошибок. Я предпочитаю консоль всему прочему.
Post a Comment