如果依赖项是唯一的快照版本并且调用了install,那么maven会选择什么?

Chr*_*wes 3 maven-2 snapshot

想象一下两个项目.第一个是framework-core项目,它在版本中1.1.0并具有多个快照构建.另一个是example-business项目,它对framework-core构建迭代号9 具有以下依赖性.

<dependency>
  <groupId>org.example</groupId>
  <artifactId>framework-core</artifactId>
  <version>1.1.0-20100518.134928-9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果mvn install被召唤framework-core会怎么样?我发现工件被复制到文件夹并被命名为*.1.1.0-SNAPSHOT.jar(如预期的那样).

这使我假设只有在将此1.1.0-SNAPSHOT版本定义为依赖项而非精确构建时才使用此版本.

要测试一些本地而不将其部署到maven存储库:调用mvn install,将依赖项更改为1.1.0-SNAPSHOT- 并使用刚安装的工件?或者是否可以覆盖特定的构建(使用install生命周期阶段)?

Pas*_*ent 7

当使用带有时间戳版本的依赖项-SNAPSHOT - 就像-20100518.134928-9在这种情况下 - 你锁定版本并明确告诉Maven使用这个版本.即使-SNAPSHOT构建了new ,依赖项也不会更新,这就是"锁定快照"的重点.

如果要使用最新版本-SNAPSHOT,请声明-SNAPSHOT版本的依赖项以解锁依赖项:

<dependency>
  <groupId>org.example</groupId>
  <artifactId>framework-core</artifactId>
  <version>1.1.0-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

手动更改它并不是什么大问题,但在某些情况下,Versions Maven插件的以下目标可能会有所帮助:

  • versions:lock-snapshots 在pom中搜索所有-SNAPSHOT版本并将其替换为-SNAPSHOT的当前时间戳版本,例如-20090327.172306-4
  • versions:unlock-snapshots在pom中搜索所有时间戳锁定的快照版本,并用-SNAPSHOT替换它们.版本:解锁快照