更新pom以使用已发布的版本

时间:2014-10-14 07:02:55

标签: maven

尝试找到更新pom的方法,以使用RELEASED依赖项的最新版本而不是SNAPSHOT。

我们有一个程序集项目,它在开发过程中使用SNAPSHOT依赖项组装要部署的映像。

但是现在我想更新依赖项以使用最新发布的依赖项。尝试使用版本:use-latest-releases但它只影响pom中已发布的版本。

有什么想法吗?

编辑(出于安全原因不能发布pom,但这里是一个例子)

<project>
    ....
    <dependencies>
        <dependency>
            <groupId>a.b.c</groupId>
            <artifactId>c-d-f</artifactId>
            <version>1.0.1-SNAPSHOT</version>
            <type>war</type>
        </dependency>
        <dependency>
            <groupId>a.b.c</groupId>
            <artifactId>g-h-i</artifactId>
            <version>1.1.6-SNAPSHOT</version>
            <type>war</type>
        </dependency>
        ...
    </dependencies>
    ...
</project>

鉴于组件a-b-c和g-h-i已经与版本1.0.1和1.1.6一起发布,我想用这些版本号替换它们在这个pom中的版本。基本上删除pom中的所有快照依赖项。

EDIT 我应该补充说,这是一个自动化过程,人与人之间的互动很少。出于某种原因,我只能获得版本:如果版本已经处于发布状态,则update-properties可以正常工作。如果我有一个快照版本0.0.1-SNAPSHOT并想要将其更新为0.0.1,它不会发生,我已经验证了该版本的存在。版本相同:use-latest-relese和版本:use-releases什么都不做。

2 个答案:

答案 0 :(得分:0)

我在这里看到两种方法:

  1. 您可以在maven pom中创建多个配置文件。最好的方法是创建一个&#34; snapshot&#34;一个用于&#34;发布&#34;。这里描述:Different dependencies for different build profiles in maven
  2. 您可以使用 maven pom属性为您的依赖项版本定义变量。见这里:http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html#resource-filtering-sect-user-defined
  3. 希望有所帮助!

答案 1 :(得分:0)

您可以在pom.xml中使用maven属性,例如:

<properties>
    <c-d-f.version>1.0.1-SNAPSHOT</c-d-f.version>
    <g-h-i.version>1.1.6-SNAPSHOT</g-h-i.version>
</properties>


<dependencies>
        <dependency>
            <groupId>a.b.c</groupId>
            <artifactId>c-d-f</artifactId>
            <version>${c-d-f.version}</version>
            <type>war</type>
        </dependency>
        <dependency>
            <groupId>a.b.c</groupId>
            <artifactId>g-h-i</artifactId>
            <version>${g-h-i.version}</version>
            <type>war</type>
        </dependency>
        ...
</dependencies>

当您想要更改版本时,可以使用maven-versions-plugin,使用以下命令,例如:

版本:update-properties -Dproperties = [$ {release_version}] -DincludeProperties = {c-d-f.version}

编辑:

请注意,如果您想使用SNAPSHOTS,则需要添加-DallowSnapshots。 Read here了解更多选项。是的,版本需要存在于repo中,否则它将失败。 BTW你是否使用括号,例如-Dproperties = [0.0.1]?在您阅读我发送给您的链接后,您会看到此命令的输入是范围,因此您必须使用括号来指定唯一版本。