在Maven中,依赖关系通常是这样设置的:

<dependency>
  <groupId>wonderful-inc</groupId>
  <artifactId>dream-library</artifactId>
  <version>1.2.3</version>
</dependency>

现在,如果您使用的是频繁发布的库,那么不断更新<version>标记可能会有些烦人。有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?


当前回答

您是否可能依赖于在开发过程中明显变化很大的开发版本?

不增加开发版本的版本,您可以只使用快照版本,在必要时覆盖快照版本,这意味着您不必在每次微小更改时更改版本标记。类似于1.0-SNAPSHOT。。。

但也许你正在尝试实现其他目标;)

其他回答

您是否可能依赖于在开发过程中明显变化很大的开发版本?

不增加开发版本的版本,您可以只使用快照版本,在必要时覆盖快照版本,这意味着您不必在每次微小更改时更改版本标记。类似于1.0-SNAPSHOT。。。

但也许你正在尝试实现其他目标;)

有时您不想使用版本范围,因为它们似乎很难解决您的依赖关系,尤其是在持续交付且有大量版本的情况下——主要是在繁重的开发过程中。

一种解决方法是使用版本maven插件。例如,可以声明属性:

<properties>
    <myname.version>1.1.1</myname.version>
</properties>

并将版本maven插件添加到pom文件中:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <properties>
                    <property>
                        <name>myname.version</name>
                        <dependencies>
                            <dependency>
                                <groupId>group-id</groupId>
                                <artifactId>artifact-id</artifactId>
                                <version>latest</version>
                            </dependency>
                        </dependencies>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
</build>

然后,为了更新依赖关系,您必须执行以下目标:

mvn versions:update-properties validate

如果有比1.1.1更新的版本,它将告诉您:

[INFO] Updated ${myname.version} from 1.1.1 to 1.3.2

请查看此页(“依赖项版本范围”部分)。你可能想做的是

<version>[1.2.3,)</version>

这些版本范围在Maven2中实现。

依赖项语法位于依赖项版本需求规范文档中。这里是为了完整:

依赖项的版本元素定义版本要求,用于计算有效的依赖项版本。版本要求具有以下语法:1.0:1.0上的“软”要求(仅为建议,如果它与依赖关系的所有其他范围相匹配)[1.0]:1.0中的“硬”要求(,1.0]:x<=1.0[1.2,1.3]:1.2<=x<=1.3[1.0,2.0):1.0<=x<2.0[1.5,):x>=1.5(,1.0],[1.2,):x<=1.0或x>=1.2;多个集合以逗号分隔(,1.1),(1.1,):这不包括1.1(例如,如果不知道与此库结合使用)

在您的情况下,您可以执行类似于<version>〔1.2.3,)</version>的操作

事实是,即使在3.x中,它仍然有效,令人惊讶的是项目的构建和部署。但是LATEST/REEASE关键字在m2e和eclipse中引起了问题,同时项目也依赖于通过LATEST/RERELEASE部署的依赖性,无法识别版本。

如果您试图将版本定义为属性,并在其他位置引用它,这也会导致问题。

因此,如果可以的话,结论是使用版本maven插件。