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

Rob*_*452 1 java pom.xml maven

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

mvn deploy -Dfrom.command=COMMANDVALUE
Run Code Online (Sandbox Code Playgroud)

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

  <properties>
    <from.pom>POMVALUE</from.pom>
  </properties>
Run Code Online (Sandbox Code Playgroud)

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

我想要一个名为used.value的第三个属性

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

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

这可能吗?

Tun*_*aki 5

你可以使用build-helper-maven-plugin:bsh-propertymojo.

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

用户可以自行决定用户属性,例如通过-Dkey=value命令行上的参数.

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