4

是否可以在 maven3 中设置默认属性。我可以通过以下方式从 bash 中获取 CATALINA_HOME

 <properties>
     <cargo.tomcat.home>${env.CATALINA_HOME}</cargo.tomcat.home>   
 </properties>

但是,如果未设置变量并且我运行评估表达式命令,我会得到空对象

!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
4

1 回答 1

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.FOOand 设置为default_FOO

于 2012-07-19T10:28:07.087 回答