Могу ли я заставить Maven 2 требовать, чтобы свойство указывалось в командной строке?
Я настраиваю сборку maven, а целевой сервер должен быть указан в командной строке как свойство (которое затем используется для выбора соответствующего профиля), например
mvn -Denv=test
Я хочу, чтобы сборка завершилась неудачей, если свойство не установлено - возможно?
Да, я новичок Maven.
РЕДАКТИРОВАТЬ: Я видел эту ссылку, которая, кажется, подразумевает, что это невозможно, но я не уверен насколько это актуально.
Ответы
Ответ 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)