如何识别和设置Maven中缺少的环境属性?

时间:2011-11-07 22:09:34

标签: maven environment-variables

我有我的构建设置,以便通过命令行传递我的变量:

mvn clean install -DsomeVariable=data

在我的pom中我有:

<someTag>${someVariable}</someTag>

这样可以正常工作,但是我想确定是否在命令行中没有指定someVariable,然后默认它以便我的脚本可以继续。

这可以在Maven中完成吗?

3 个答案:

答案 0 :(得分:13)

您可以在POM文件的properties部分指定默认属性值:

<properties>
  <someVariable>myVariable</someVariable>
</properties>

如果要确保在命令行上提供属性值 ALWAYS ,则可以使用maven-enforcer-plugin。

这是一个显示如何强制执行系统属性的链接 - &gt; http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html

我会在这里逐字复制XML,以防上述链接变坏。

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.0.1</version>
        <executions>
          <execution>
            <id>enforce-property</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireProperty>
                  <property>basedir</property>
                  <message>You must have a basedir!</message>
                  <regex>\d</regex>
                  <regexMessage>You must have a digit in your baseDir!</regexMessage>
                </requireProperty>
                <requireProperty>
                  <property>project.version</property>
                  <message>"Project version must be specified."</message>
                  <regex>(\d|-SNAPSHOT)$</regex>
                  <regexMessage>"Project version must end in a number or -SNAPSHOT."</regexMessage>
                </requireProperty>
              </rules>
              <fail>true</fail>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

答案 1 :(得分:6)

您可以将默认值指定为

<properties>
      <someTag>defaultValue</someTag>
</properties>

当您运行maven命令时,您可以像这样覆盖该值

mvn clean package -DsomeTag=newSpecificValue

答案 2 :(得分:2)

您可以改用配置文件,但每个配置文件都需要配置文件 变量

 <profile>
    <id>default-value-1</id>
    <activation>
          <activeByDefault>false</activeByDefault>
          <property>
             <name>!someVariable</name>
          </property>
    </activation>
    <properties>
        <someVariable>DEFAULT-VALUE</someVariable>
    </properties>
</profile>