通过属性文件指定pom属性?

时间:2015-01-16 15:16:10

标签: java maven properties

由于我的构建系统的设计方式(RTC Build Engine),我想通过属性文件为maven提供属性值,而不是为每个属性指定-Dkey = value。

我在S.O.上发现了几个问题。 (How to set build properties from a file in Maven POM?How to read an external properties file in Maven)与此问题完全相关,但它们相对较旧,并且都需要自定义插件才能工作(处于alpha状态)。

我意识到像这样将参数传递给Maven可能不是最好的解决方案,但另一个选项是通过-D设置指定命令行上的所有内容,这也是不理想的。

此外,鉴于此属性文件仅由构建引擎(而非个别开发人员)使用,我并不认为它属于pom。但是我找不到任何其他允许我指定要使用的插件的机制 - settings.xml不允许指定插件。

在这种情况下,我唯一的选择是使用插件并在项目pom中指定它吗?

2 个答案:

答案 0 :(得分:4)

你可以放在pom中......

<properties>
    <core-version>1234</core-version>
    <lib-version>1234</lib-version>
    <build-version>9999</lib-version>
    <build-date>20150101</build-date>
</properties>

包含您需要的所有属性。

或者你可以使用......

<build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>dev.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

,文件dev.properties将包含属性

core-version=1234
lib-version=1234
build-version=9999
build-date=20150101
...

或者......您可以使用如here

所示的settings.xml文件注入属性

您可能还会发现Maven内部版本号插件很有用...... here

答案 1 :(得分:1)

在这种情况下最好的是升级到至少Maven 3.2.1,它支持在命令行上定义这样的属性,如下所示:

mvn -Drevision=1234 -Dchangelist=WhatEver -Dsha1=XXXX clean package

但你只能使用上面的名字。

Excerpt from release notes:

  

一个简单的更改,以防止Maven发出有关版本的警告   带有属性表达式。版本中允许的属性表达式   包括$ {revision},$ {changelist}和$ {sha1}。这些属性可以   在外部设置,但最终会在Maven中创建一个机制   这些属性可以以标准方式注入。例如   你可能想要收集当前的Git版本并注入该值   进入$ {sha1}。这绝不是连续的完整解决方案   交付,但是朝着正确的方向迈出了一步。