mvn release:prepare
它经常要求我解析快照依赖项。 有没有办法在批处理模式下执行此操作,以便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
答案 0 :(得分:8)
请注意,根据maven-release-plugin文档,您可以使用allowTimestampedSnapshots配置Maven忽略SNAPSHOT依赖项检查:
<强> allowTimestampedSnapshots:强>
是否允许有时间戳的SNAPSHOT依赖项。找到任何SNAPSHOT时默认为失败。
- 类型:布尔值
- 自:2.0-beta-7
- 必填:否
- 表达式:$ {ignoreSnapshots}
- 默认值:false
或者只需运行以下命令:
mvn release:prepare -DignoreSnapshots = true
但是,仍然建议在执行最终版本之前解析所有SNAPSHOT依赖项,因为它是大多数人使用的约定。您应该始终考虑在开发阶段手动执行,而不是在发布阶段自动批处理,因为更改/升级项目的依赖项(您自己或第三方jar)有时可能会引入错误或不兼容并破坏您的项目,这通常需要开发人员的注意并在最终发布之前修复它们。
换句话说,依赖解析不是一个应该在发布阶段完成的任务,而且,它不是一个应该在没有开发人员注意的情况下自动完成的任务。
答案 1 :(得分:5)
您可以在发布前通过versions-maven-plugin更新SNAPSHOT。
答案 2 :(得分:3)
如果您的依赖项是您自己的程序,并且其生命周期与您尝试发布的程序紧密相关,那么您可以考虑使用多模块项目:http://maven.apache.org/guides/mini/guide-multiple-modules.html。 Maven发布插件将更新所有依赖模块的版本。
如果没有,你可能正在做一些你不应该做的事情。 只是将1.0.0-SNAPSHOT更改为1.0.0并不能确保您的应用程序继续工作。所以不要认为Maven应该!
进一步考虑
Maven发布插件会检查您是否使用快照依赖项,因为根据定义,Snapshot是不稳定的版本。它可能会随着时间而变化。这意味着今天的工作可能明天不起作用。
释放意味着您的版本是稳定的,并且可以随时重现构建而无需任何更改。使用Snapshot版本,此断言变为false。
所以,