Maven 如何命名包含特定更改的快照,而不使其成为当前版本的最新快照?

Maven 如何命名包含特定更改的快照,而不使其成为当前版本的最新快照?,maven,maven-3,pom.xml,Maven,Maven 3,Pom.xml,在少数内部库中进行更改时,我决定在版本中添加后缀,这样我就可以在依赖项中使用修改后的库,而不会给其他正在进行的工作带来麻烦。 例如: 1.1.0-SNAPSHOT --> 1.1.0-mychange-SNAPSHOT 但是,它导致了一些问题,因为版本1.1.0-mychange的快照仍然被视为版本1.1.0的最新快照,并且它破坏了我们的一些构建(并且其他人花了一些时间才注意到是什么导致了问题) 当然,我可以简单地使用1.2.0-SNAPSHOT——但是如果有人会提出同样的想法呢?(同样

在少数内部库中进行更改时,我决定在版本中添加后缀,这样我就可以在依赖项中使用修改后的库,而不会给其他正在进行的工作带来麻烦。
例如:

1.1.0-SNAPSHOT --> 1.1.0-mychange-SNAPSHOT
但是,它导致了一些问题,因为版本
1.1.0-mychange
的快照仍然被视为版本
1.1.0
的最新快照,并且它破坏了我们的一些构建(并且其他人花了一些时间才注意到是什么导致了问题)

当然,我可以简单地使用
1.2.0-SNAPSHOT
——但是如果有人会提出同样的想法呢?(同样,更改是
1.1.0
的候选版本,因此将其放在更高版本中没有多大意义)


问题:有没有更好的方法来创建一行单独的快照,这样可以保护其他人不被意外使用我的快照?

在您的情况下,您正在处理同一库的分支(或者通常是不同的代码库),然后这些分支将被合并(可能在某个时候,基于某些标准)因此,您应该保持相同的版本控制。因此,合理的方法是使用Maven

使用分类器,您将具有以下优势:

  • 使用者不会受到您的更改的影响,因为您不会影响官方快照依赖关系
  • 消费者可以通过手动更新依赖项(添加
    分类器
    元素)或通过下面介绍的方法轻松地从一个依赖项切换到另一个依赖项
  • 您将通过有意义的分类器名称(推荐)跟踪更改背后的分支/含义/要求
  • Maven将官方快照和您的分类版本保存在相同的Maven存储库位置(相同的groupId、相同的artifactId、相同的版本,即GAV),但作为不同的依赖项(实际上,真正唯一的坐标是GAVC,其中最后一个C代表分类器)
因此,对于依赖性:


com.sample
测试
0.0.1-快照
你可以:


com.sample
测试
0.0.1-快照
羽毛粉
然后消费者可以简单地决定声明哪个依赖项,或者在需要时手动更改/更新它。或者,他们也可以应用以下方法轻松地对您正在处理的依赖项进行双重检查(编译/测试):


测试分类器
羽毛粉
com.sample
测试
0.0.1-快照
${dep.classifier}
我们在这里做的是:

  • 我们将分类器定义为一个属性,
    dep.classifier
    属性(示例名称)
  • 默认情况下,属性为空,Maven将获取没有分类器的官方依赖项(很好的技巧)
  • 在概要文件中,我们将想要的分类器定义为概要文件属性
然后,默认生成通常将使用标准依赖项,同时使用:

mvn clean install -Ptest-classifier

相反,构建将使用您的依赖项(假定它在相关存储库中可用),使使用者能够轻松地在开发分支/版本/功能之间切换(和测试)。我刚刚测试了这个方法,效果很好

mvn clean install -Ddep.classifier=featureA