11

mvn 发布:准备

它不断要求我解决快照依赖项。有没有办法在批处理模式下执行此操作,以便 Maven 自动使用关联的版本。即,如果依赖项是 1.0.0-SNAPSHOT,它会自动将此依赖项更新到 1.0.0 版本吗?

[INFO] Checking dependencies and plugins for snapshots ...
There are still some remaining snapshot dependencies.: Do you want to resolve them now?     (yes/no) no: : yes
Dependency type to resolve,: specify the selection number ( 0:All 1:Project Dependencies 2:Plugins 3:Reports 4:Extensions ): (0/1/2/3) 1: : 1
Resolve Project Dependency Snapshots.: 'com.my.project' set to release? (yes/no) yes: : yes
What is the next development version? (0.0.2-SNAPSHOT) 0.0.2-SNAPSHOT: : 0.0.2-SNAPSHOT
4

3 回答 3

9

请注意,根据 maven-release-plugin 文档,您可以使用allowTimestampedSnapshots配置 Maven 忽略 SNAPSHOT 依赖项检查:

允许时间戳快照:

是否允许带时间戳的 SNAPSHOT 依赖项。默认是在查找任何 SNAPSHOT 时失败。

  • 类型:布尔值
  • 自:2.0-beta-7
  • 要求:否
  • 表达式:${ignoreSnapshots}
  • 默认值:假

或者只需运行以下命令:

mvn release:prepare -DignoreSnapshots=true

但是,仍然建议在最终发布之前解决所有 SNAPSHOT 依赖项,因为这是大多数人使用的约定。您应该始终考虑在开发阶段手动执行,而不是在发布阶段自动批处理,因为更改/升级项目的依赖项(您自己或第三方 jar)有时可能会引入错误或不兼容并破坏您的项目,这通常需要开发人员的注意并在最终发布之前修复它们。

换句话说,依赖解析不是一个应该在发布阶段完成的任务,而且它不是一个应该在没有开发人员注意的情况下自动完成的任务。

于 2012-07-14T02:13:52.933 回答
5

您可以在发布前通过versions-maven-plugin更新 SNAPSHOT 。

于 2012-07-13T17:53:25.913 回答
3

如果您的依赖项是您自己的程序,并且它的生命周期与您尝试发布的程序密切相关,您可以考虑使用多模块项目:http ://maven.apache.org/guides/mini/guide-multiple-模块.html。Maven 发布插件会更新所有依赖模块的版本。

如果没有,你可能正在做一些你不应该做的事情。仅将 1.0.0-SNAPSHOT 更改为 1.0.0 并不能确保您的应用程序将继续工作。所以不认为Maven应该!

进一步的考虑

Maven 发布插件检查您是否使用快照依赖项,因为根据定义,快照是不稳定的版本。它可能会随着时间而改变。这意味着今天起作用的东西明天可能不起作用。

发布意味着您的版本是稳定的,并且构建可以随时复制而无需任何更改。使用快照版本,此断言变为错误。

所以,

于 2012-07-13T22:04:03.520 回答