Как заставить непрофилированную сборку maven завершиться неудачей?

#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>