我想在发布项目时获得有关Maven最佳实践的更多信息。
假设我有一个带有 N 模块的父pom。所有版本都包含在 SNAPSHOT 版本中,包括父版本。如果我想发布一个但不是所有模块,我应该在RELEASE中为父pom项目传递版本,还是将其保留在SNAPSHOT中?
有什么优点和缺点?
答案 0 :(得分:1)
更一般地说,在简单性方面存在巨大优势,并且在Nexus盒上存在很少的缺点(硬盘驱动器消耗更多),以保持所有版本号在父子结构项目中均匀,包括保持RELEASE / SNAPSHOT状态同步。通过始终同时发布所有模块,您不必记住并管理组件的相互依赖性。您不需要向那些仅依赖于尚未真正更改的组件的客户发布版本。
话虽如此,如果您决定“微观管理”父子结构项目,并且每次只发布某个子组件,我会遵循以下规则:
1.在旧的RELEASE版本中保存一个组件,直到需要更改为止。只有在修改后才能将其提升到下一个SNAPSHOT。
1a。这也适用于父母。
2.如果一个模块依赖于另一个已被修改的模块,那么它也会被视为对前一个模块的修改
(如果你想修改一个依赖项,但要保留依赖于它的旧版本的项目,它在一致性方面有很大帮助,并能够推断出简单分支的内容,以及在单独的分支中修改和释放依赖关系,其中依赖于它的项目也被视为被修改,但是从我们不释放它的位置。这有助于您记住依赖项和依赖它的项目正在从不同的分支机构中释放,因此目前故意彼此不一致。)
2a。这延伸到这样的情况,而不是“依赖于”我们拥有“拥有父母”的模块。在很多方面,父母就像是依赖,就像maven。
3.当您想要发布(升级到下一个RELEASE版本)模块时,您还需要发布它所依赖的所有修改模块(包括其修改后的父模块)
根据我的经验,尊重这些将使您的项目保持一致状态,并使其易于推断其状态。
由于您的父母在SNAPSHOT,我认为它已被修改。因此,在释放要释放的孩子时,需要将其碰到下一个RELEASE。
如果父级自上次发布以来没有更改过,那么您可以将其保留在最后一个RELEASE版本中,这样您就不需要立即将它与“依赖”的子项一起发布(就存在而言)它的孩子)。
答案 1 :(得分:1)
您正在写'所有都在SNAPSHOT版本中,包括父级'您不应该在父SNAPSHOT中设置这样您无法释放所有项目。 如果您只想发布项目的子部分,那么请创建另一个父项并包含在您的父项和所有项目之间,或者作为另一项父项使用。事实上,您有理由只发布项目的子集,这样您就可以更好地记录您的工作。