2016-09-16 115 views
1

我有一个maven属性问题,我无法在文档中找到引用。 从命令行我将输入属性“from.command”。此属性将始终存在。根据其他属性的存在设置maven属性

mvn deploy -Dfrom.command=COMMANDVALUE 

里面的pom.xml我会指定其他属性:

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

此属性将一些时间在那里,其他时间会丢失。

我想有一个名为used.value

第三属性我想used.value被设置为“from.pom”的值,如果该属性存在,否则应设置的值“from.command”

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

这可能吗?

回答

2

您可以使用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属性导出。命令行属性从Maven会话中检索到getUserProperties()

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

这个目标自动绑定到validate阶段,这是在默认的生命周期运行的第一阶段,那么你就可以使用${used.value}作为构建其余里面的属性。

+0

这看起来像一个很好的答案,但我的解决方案必须与Windows和Linux一起工作 – Robert3452

+0

@ Robert3452这是独立的系统,无论在Linux还是Windows上都是如此。 – Tunaki

+0

好爽。我会在我的项目上设置它并检查出 – Robert3452