maven pom的存储库元素中启用(快照,发布)标记的用途是什么?

Sel*_*lva 9 pom.xml maven-3 maven

当指定库元素为什么我们需要<snapshot><enabled>false/true</enabled></snapshot><releases/>呢?

它如何影响依赖的特定版本?(1.2.3-SNAPSHOT,1.2.3,1.2.3-RELEASE)

当存在多个存储库时,将搜索哪个存储库以获取工件?工件是如何解决的?

A_D*_*teo 12

在指定存储库元素时,为什么我们需要false/true?

如果我们想要仅为已发布的版本提供存储库,并且仅为SNAPSHOT版本提供另一个存储库,则需要这样做.

这是企业Maven存储库(即Nexus,Artifactory,Archivia)的常见用例,当某些版本(如SNAPSHOT)仅在存储库中可用时(部署但CI作业,例如),而发布的版本仅可用在另一个存储库中 为PROD发布内容的CI作业应该只使用后一个存储库,而不是使用/允许任何SNAPSHOT版本,否则会破坏构建(强制构建可重复性和良好实践).

官方Maven设置文档

版本,快照:这些是每种工件,版本或快照的策略.通过这两个集合,POM可以在单个存储库中独立于另一个类型更改每种类型的策略.例如,可以决定仅启用快照下载,可能用于开发目的.

enabled:truefalse是否为相应类型(releasessnapshots)启用此存储库.


当存在多个存储库时,将搜索哪个存储库以获取工件?工件是如何解决的?

声明的顺序将影响Maven使用的查找顺序.检查此官方Maven票证,提供从版本3.0开始的正确行为的修复程序.

  • MNG-4400:在工件解析期间不遵守settings.xml中的存储库顺序

它如何影响依赖的特定版本?(1.2.3-SNAPSHOT,1.2.3,1.2.3-RELEASE)

合并上面的两个答案,取决于声明的顺序和哪个存储库允许哪种类型的工件(快照与否).


进一步参考:

  • 为什么?为什么在开始设计pom.xml之前他们还不了解XML属性?例如,它本可以写得更简洁一些。&lt;snapshots enabled =“ true” /&gt;`或什至&lt;&lt; repository id =“ whatever” snapshots =“ true”&gt;`... (3认同)
  • Release 等相应类型的存储库的默认值是多少。我的意思是,如果我不指定 &lt;releases&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/releases&gt; 并且我已启用快照。那么该 repo 是不可发布还是有默认值? (2认同)
  • 有关默认值的信息,请参阅 /sf/ask/4317901871/ (2认同)