根据其他属性的存在设置maven属性

时间:2016-09-16 15:40:42

标签: java maven pom.xml

我有一个我无法在文档中提到的maven属性问题。 从命令行我将输入属性" from.command"。此属性将始终存在。

mvn deploy -Dfrom.command=COMMANDVALUE

在pom.xml中我将指定另一个属性:

  <properties>
    <from.pom>POMVALUE</from.pom>
  </properties>

此属性有时会在那里,有时则会丢失。

我想要一个名为used.value

的第三个属性

我想将used.value设置为&#34; from.pom&#34;的值如果该属性存在,否则应将其设置为&#34; from.command&#34;

的值

这需要因为我需要从另一个脚本运行maven构建而我不希望脚本必须检查所有pom文件。

这可能吗?

1 个答案:

答案 0 :(得分:5)

您可以使用build-helper-maven-plugin:bsh-property mojo。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.10</version>
  <executions>
    <execution>
      <id>bsh-property</id>
      <goals>
        <goal>bsh-property</goal>
      </goals>
      <configuration>
        <properties>
          <property>used.value</property>
        </properties>
        <source>
          used.value = project.getProperties().getProperty("from.pom", session.getUserProperties().getProperty("from.command"));
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

此目标可以编写BeanShell脚本。它自动将变量project定义为实际的Maven项目,并将session定义为正在执行的Maven会话。

上面的脚本从Maven项目的属性中获取属性"from.pom",默认为命令行上设置的"from.command"属性。它将它设置为used.value变量,然后在执行脚本后由插件将其导出为Maven属性。使用getUserProperties()

从Maven会话中检索命令行属性
  

用户已根据自己的判断直接配置用户属性,例如通过命令行上的-Dkey=value参数。

此目标自动绑定到validate阶段,这是在默认生命周期中运行的第一阶段,因此您将能够在其余部分中使用${used.value}作为属性