#maven #profile
#maven #Профиль
Вопрос:
Я бы согласился, что этот вопрос несколько странный.
Допустим, у меня есть проект maven, который имеет следующие профили.
$ mvn help:all-profiles
Profile Id: profile1 (...)
Profile Id: profile2 (...)
Profile Id: profile3 (...)
$
Есть ли в любом случае, что я могу принудительно выполнить сбой без какого-либо конкретного выбора профиля?
$ mvn clean package
FAIL
$ mvn -Pprofile1 clean package
SUCCESS
$ mvn -Pprofile2 clean package
SUCCESS
$ mvn -Pprofile3 clean package
SUCCESS
$
ОБНОВЛЕНИЕ (с личным заключением)
Опять же, этот вопрос не является хорошим, даже если есть кто-то, у кого есть точная проблема.
Первоначальное намерение заключается в возложении ответственности на тех, кто создает проект с явным выбором профиля.
И комментарий @khmarbaise, и ответ @AngeloNeuschitzer подходят для решения проблемы.
Но здесь я думаю, что мне следует обновить то, что у меня получилось.
Как прокомментировал @khmarbaise, мы можем сделать так.
- Создание профилей
- Сделайте один из этих профилей activeByDefault
$ mvn help:all-profiles
Profile Id: development
Profile Id: integration
Profile Id: staging
Profile Id: production (active by default)
$ mvm clean package
Profile -> production
$ mvn -Pdevelopment clean package
Profile -> development
Одна из первоначальных проблем, с которой я столкнулся, заключается в том, что, если кто-нибудь построит для разработки и случайно развернет в производство по ошибке?
В этом случае я выбираю рабочий профиль активным по умолчанию. Использование классификатора является одним из дополнительных методов, которые я могу использовать.
Комментарии:
1. Как насчет activeByDefault для одного из этих профилей?
Ответ №1:
Вы можете использовать maven-enforcer-plugin для сбоя сборки, когда ни один профиль не активен. Это намного чище, чем иметь специальный профиль, который всегда терпит неудачу (код в принятом ответе даже выглядит вредоносным).
Используйте встроенное правило requireActiveProfile с <all>false</all>
, чтобы обеспечить, чтобы хотя бы один профиль был активным:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M2</version>
<executions>
<execution>
<id>enforce-first-or-second-profile-is-active</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireActiveProfile>
<profiles>first,second</profiles>
<all>false</all>
</requireActiveProfile>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Вы даже можете добавить пользовательское сообщение в конфигурацию.
Ответ №2:
Добавьте профиль, который делает что-то, что должно завершиться ошибкой при очистке, и сделайте это activeByDefault
. Возможно, вы даже захотите написать плагин, который для этого ничего не делает, кроме сбоя.
ОСТОРОЖНО! Я написал это, не убедившись, что каталог ‘/’ действительно невозможно удалить при любых обстоятельствах. Это может привести к серьезной потере данных, используйте на свой страх и риск. (Тем не менее, это работает на моей машине)
<profile>
<id>failure</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<directory>#!?:</directory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
<configuration>
<failOnError>true</failOnError>
<filesets>
<fileset>
<directory>/</directory>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins>
</build>
</profile>