Подтвердить что ты не робот

Могу ли я заставить Maven 2 требовать, чтобы свойство указывалось в командной строке?

Я настраиваю сборку maven, а целевой сервер должен быть указан в командной строке как свойство (которое затем используется для выбора соответствующего профиля), например

mvn -Denv=test

Я хочу, чтобы сборка завершилась неудачей, если свойство не установлено - возможно?

Да, я новичок Maven.

РЕДАКТИРОВАТЬ: Я видел эту ссылку, которая, кажется, подразумевает, что это невозможно, но я не уверен насколько это актуально.

4b9b3361

Ответ 1

Все близки, но есть правило в принудительном порядке, чтобы специально проверить свойство, не требуется ant или фанк-профилей: http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html

Правило также может проверять значение свойства.

Ответ 2

Возможно, вы можете использовать такое обходное решение: в Maven вы можете активировать профиль, если какое-либо свойство не установлено:

<project>
...
    <profiles>
        <profile>
            <id>failure_profile</id>
            <activation>
                <property>
                    <name>!env</name>
                </property>
            </activation>
        </profile>
    </profiles>
</project>

Затем вы должны заставить этот профиль всегда терпеть неудачу, например. используя maven-enforcer-plugin:

<profile>
    <id>failure_profile</id>
    ...
    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <AlwaysFail/>
                  </rules>
                  <fail>true</fail>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
</profile>

Если вы не указали -Denv build, то сбой:

[INFO] [enforcer:enforce {execution: enforce}]
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.AlwaysFail failed with message:
Always fails!
[INFO] ---------------------------------------------------------
[ERROR] BUILD ERROR

Ну, это гораздо более подробный, чем Ant, но чистый Maven:)

Ответ 3

Мое первое наклонение состояло в том, чтобы сделать профиль активным всякий раз, когда свойство env не установлено, и если он каким-то образом сработает. Возможно, вы могли бы написать Maven Plugin, который проверяет это свойство и терпит неудачу, если он не присутствует?

В качестве альтернативы вы, вероятно, можете проверить его с помощью очень маленького ant -build script.

Ответ 4

Чтобы разработать альтернативное решение edbrannin:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yourcompany</groupId>
  <artifactId>yourproject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>checkParam</id>
            <phase>initialize</phase>
            <goals><goal>run</goal></goals>
            <configuration>
              <tasks>
                <fail message="'env' property must be set" unless="env"/>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

предоставит вам следующий результат:

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An Ant BuildException has occured: 'env' property must be set

ИМХО - самый простой способ сделать это (тот, на который я лично поеду).

Вы можете даже управлять набором допустимых значений с помощью вложенных тегов <condition>, содержащих теги <or> и <equals> (см. руководство Ant: http://ant.apache.org/manual/Tasks/conditions.html)