在处理几个内部库中的更改时,我决定为版本添加后缀,因此我可以在依赖项中使用修改后的库,而不会对我正在进行的工作造成其他人的麻烦。
例如:
1.1.0-SNAPSHOT --> 1.1.0-mychange-SNAPSHOT
然而,它导致了一些问题,因为版本1.1.0-mychange
的快照仍被视为版本1.1.0
的最新快照,并且它打破了我们的一些版本(并且其他人花了一些时间来注意什么造成问题)。
当然我可以简单地使用1.2.0-SNAPSHOT
- 但如果有人会想出同样的想法呢? (也改变了1.1.0
的候选者,所以把它放在更高的版本中没有多大意义)
问题:是否有更好的方法来创建单独的快照行,这种方式可以保护他人不会意外使用我的快照?
答案 0 :(得分:2)
在您的情况下,您正在处理同一个库的一个分支(或一般的不同代码库),然后将其合并(可能在某些时候,根据某些标准),因此您应该保留相同的版本。因此,合理的方法是使用Maven classifier。
使用分类器,您将具有以下优势:
classifier
元素)或通过下面介绍的方法轻松地从一个依赖关系切换到另一个依赖关系。所以对于依赖:
<dependency>
<groupId>com.sample</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
你可以:
<dependency>
<groupId>com.sample</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<classifier>featureA</classifier>
</dependency>
然后,消费者可以简单地决定在需要时声明或手动更改/更新哪个依赖项。或者,他们也可以应用以下方法轻松地仔细检查(编译/测试)您正在处理的依赖项:
<properties>
<dep.classifier></dep.classifier>
</properties>
<profiles>
<profile>
<id>test-classifier</id>
<properties>
<dep.classifier>featureA</dep.classifier>
</properties>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>com.sample</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<classifier>${dep.classifier}</classifier>
</dependency>
</dependencies>
我们在这做什么:
dep.classifier
属性(样本名称)然后,默认构建通常使用标准依赖项,同时运行:
mvn clean install -Ptest-classifier
或
mvn clean install -Ddep.classifier=featureA
构建将改为使用您的依赖项(假设它在相关存储库中可用),使消费者能够在开发分支/版本/功能之间轻松切换(和测试)。我刚刚测试了这种方法并且工作正常。