Можно ли заставить Maven 2 требовать, чтобы свойство указывалось в командной строке? - PullRequest
19 голосов
/ 08 января 2009

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

mvn -Denv=test

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

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

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

Ответы [ 4 ]

25 голосов
/ 11 апреля 2009

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

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

5 голосов
/ 12 января 2009

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

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

Тогда вы должны заставить этот профиль всегда терпеть неудачу, например используя maven -forcer-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:)

2 голосов
/ 09 января 2009

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

С другой стороны, вы могли бы проверить это с помощью очень маленького скрипта ant-build.

1 голос
/ 09 января 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...