如何使用_profiles_在Maven3中实现变量依赖版本?

时间:2011-01-26 07:22:31

标签: variables dependencies version interpolation maven-3

我们需要使用不同版本的deps构建项目(在本例中为Postgres 8和Postgres 9)。此外,我们的开发人员在他们的计算机上有不同版本的数据库。

我试图做这样的事情:

    <profile>
        <id>postgres9</id>
        <properties>
            <postgres.driver.version>
                9.0-801
            </postgres.driver.version>
        </properties>
    </profile>

    <profile>
        <id>postgres8</id>
        <properties>
            <postgres.driver.version>
                8.3-603
            </postgres.driver.version>
        </properties>
    </profile>

    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>${postgres.driver.version}</version>
    </dependency>

    <properties>
        <postgres.driver.version>8.3-603</postgres.driver.version>
    </properties>



    mvn clean test -Ppostgres9

但它没有用。 Profile变量根本不会覆盖pom变量。而且,即使使用〜/ .m2 / settings.xml,我也无法实现。

有谁知道怎么做?感谢。

2 个答案:

答案 0 :(得分:1)

我们一直试图在我们的项目中做类似的事情。始终如一的唯一方法是传递-Dpostgres.driver.version = 8.3-603。出于某种原因,在计算依赖关系之前不会插入变量。

奇怪的是,它似乎适用于Maven 3.0.2下我的项目的部分。我现在正试图深入研究。

答案 1 :(得分:1)

我遇到了同样的问题。 将版本(带属性)从依赖项移动到父pom中的dependencyManagement解决了它:

<强>旧: pom.xml中:

<dependencies>
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>${postgres.driver.version}</version>
    </dependency>
</dependencies>

的pom.xml

<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>

父母:

  <dependencyManagement>
    <dependencies>
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>${postgres.driver.version}</version>
    </dependency>
    </dependencies>
  </dependencyManagement>