如何在不成为当前版本的最新快照的情况下命名包含特定更改的快照?

问题描述 投票:1回答:1

在处理几个内部库中的更改时,我决定为版本添加后缀,因此我可以在依赖项中使用修改后的库,而不会在我正在进行的工作中给其他人带来麻烦。 例如:

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-3 pom.xml
1个回答
2
投票

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

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

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

所以对于依赖:

<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属性(样本名称)
  • 默认情况下该属性为空,Maven将获取没有分类器的官方依赖(很好的技巧)
  • 在配置文件中,我们将我们想要的分类器定义为配置文件属性

然后,默认构建通常会使用标准依赖项,同时运行:

mvn clean install -Ptest-classifier

要么

mvn clean install -Ddep.classifier=featureA

构建将改为使用您的依赖项(假设它在相关存储库中可用),使消费者能够在开发分支/版本/功能之间轻松切换(和测试)。我刚刚测试了这种方法并且工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.