我可以强制Maven 2要求在命令行上指定属性吗?

时间:2009-01-08 17:42:28

标签: maven-2

我正在设置maven构建,并且需要在命令行上将目标服务器指定为属性(然后用于选择适当的配置文件),例如

mvn -Denv=test

如果没有设置属性,我希望构建失败吗?

是的,我是Maven的新手。

编辑:我见过this link,这似乎意味着它不可能,但我不确定它是如何更新的。

4 个答案:

答案 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