我正在设置maven构建,并且需要在命令行上将目标服务器指定为属性(然后用于选择适当的配置文件),例如
mvn -Denv=test
如果没有设置属性,我希望构建失败吗?
是的,我是Maven的新手。
编辑:我见过this link,这似乎意味着它不可能,但我不确定它是如何更新的。
答案 0 :(得分:25)
每个人都很接近,但执法者中有一条规则要专门检查属性,不需要蚂蚁或时髦的个人资料:http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html
规则还可以检查属性的值。
答案 1 :(得分:5)
也许您可以使用这样的解决方法:在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构建将失败:
[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 :(得分:2)
我的第一个倾向是在env属性未设置时创建一个活动的配置文件,并以某种方式使其失败。也许你可以编写一个测试该属性的Maven插件,如果它不存在则会失败?
或者,您可以使用非常小的ant-build脚本来测试它。
答案 3 :(得分:1)
详细说明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)