在maven3中设置默认属性。可能?

时间:2012-07-17 14:56:05

标签: java maven maven-plugin maven-3

是否可以在maven3中设置默认属性。我可以通过以下

从bash中获取CATALINA_HOME
 <properties>
     <cargo.tomcat.home>${env.CATALINA_HOME}</cargo.tomcat.home>   
 </properties>

但是如果没有设置变量,我运行evaluate expression命令,我得到null对象

! mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression = cargo.tomcat.home

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-help-plugin:2.1.1:evaluate (default-cli) @ cargo-selenium-springmvc-webapp ---
[INFO] No artifact parameter specified, using 'com.keybroker.spike:cargo-selenium-springmvc-webapp:war:1.0-SNAPSHOT' as project.
[INFO] 
null object or invalid expression
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.721s
[INFO] Finished at: Tue Jul 17 16:51:48 CEST 2012
[INFO] Final Memory: 5M/81M
[INFO] ------------------------------------------------------------------------

我有兴趣设置默认的$ CATALINA_HOME。我不介意使用另一个插件,但vanilla maven3最好。所以我在寻找

if $CATALINA_HOME is set by bash then use it
otherwise if the is a -DcatalinaHome argument passed to maven, then use that 
if all else fails, default to XYZ path for $CATALINA_HOME

1 个答案:

答案 0 :(得分:4)

是的,这是可能的。我在Windows 7和Maven 3.0.4上测试了这个。 FOO是我的示例环境变量。

首先,将以下配置文件添加到POM

<profiles>
  <profile>
    <id>env.FOO</id>
    <activation>
      <property>
        <name>!env.FOO</name>
      </property>
    </activation>
    <properties>
      <env.FOO>default_FOO</env.FOO>
    </properties>
  </profile>
</profiles>

如您所知,占位符${env.FOO}在POM的其他位置使用,将替换为实际值。提供价值的三种方式是:

1)通过设置环境变量

set FOO=env_FOO       (Windows)
export FOO=env_FOO    (Bash)

2)提供命令行参数(这将覆盖环境变量)

mvn -Denv.FOO=cmdline_FOO    (note the env. prefix)

将覆盖环境值。

3)未通过任何先前方法设置FOO,POM中的值将被!env.FOO激活子句并设置为{{1 }}