【问题标题】:setting a default property in maven3. Possible?在 maven3 中设置默认属性。可能的?
【发布时间】:2012-07-16 12:56:01
【问题描述】:

是否可以在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

【问题讨论】:

    标签: java maven maven-plugin maven-3


    【解决方案1】:

    是的,这是可能的。我已经在 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设置为default_FOO

    【讨论】:

    • 如果我想设置10个变量,它会如何工作?
    • 具有多个 &lt;profile&gt; 元素和多个命令行覆盖 -Denv.FOO=cmdline_FOO -Denv.BAR=cmdline_BAR
    • Unmaintable @andyb...但是好的,我理解这种方法。
    • 这个答案现在已经很老了,所以新版本的 Maven 可能已经解决了这个问题,或者可能存在一个插件来更好地管理这个问题。您使用的是最新版本吗?
    • 是的...... Maven 不知道如何处理这个......我在 Slack 上的“Java 专家”社区上发表了我的疑问,他们让我迁移到 Gradle(确认我的理论)。我现在在 Gradle 上...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2012-01-08
    • 1970-01-01
    • 2019-07-04
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多