什么版本标签用于分叉的maven项目?

时间:2012-05-02 14:15:13

标签: maven versioning

我经常需要派一个使用Maven的Java项目(通常在github上)。

当我分叉项目并进行更改时,我通常希望将一个版本剪切到我自己的私有(但在互联网上)maven存储库。

因此,我的自定义版本应该是什么版本标签的问题。我无法做SNAPSHOT,因为我需要它才能成为一个版本。有时我用.ADAMGENT后缀项目(因为我是一个自恋者)。让我说我叉1.0.4-SNAPSHOT。我可能会将其更改为1.0.4.ADAMGENT。我不知道这是不是一个好主意。在某些情况下,我甚至无法用.ADAMGENT作为后缀,因为Spring的Gradle构建工具不喜欢它。因此,对于Spring项目,如果它是里程碑,我会.ADAMGENT.RELEASE.ADAMGENT.M1

其他人做了什么?

更新: 虽然我说fork我更多的补丁程度更改。另一方面,赏金(由不同的用户)可能用于分叉和/或补丁

4 个答案:

答案 0 :(得分:18)

因为您要分叉,请使用其他组ID。

实际情况是,一旦你开始对你的本地分支进行更改,是一个不同的工件。由您的组织制作的工件,而不是您从中获取的工件。

关于版本号,如果您的更改总是次要的,我在分叉时会使用源树的主要版本号和可能的次版本号,否则,我将在1.0再次重新开始.0并在项目POM中记下我分发的版本。

例如:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.adamgent</groupId>
    <artifactId>project-xyz</artifactId> <!-- same artifact ID -->
    <version>1.0.0-RELEASE</version>
    <name>My Project XYZ</name> <!-- different display name -->
    <description>My fork of project XYZ created from v5.42.0 of original sources.</description>
    ....

切换依赖项的组ID比切换版本ID要困难得多。这两种机制都可以用来轻松获得所需的发布工件。但是,通过更改组ID,您可以获得以下优势:

  1. 您可以更轻松地在Nexus中跟踪您的货叉
  2. 您可以消除由于他们未创建的组织中的工件而导致的任何混淆
  3. 您保留在standard guidelines内的Maven版本标识符

答案 1 :(得分:5)

我通常会添加一个后缀(例如名称),然后添加一个正在运行的编号,以避免混淆我根据上游版本制作的多个版本。在您的设置中,这可能会转换为以下内容:

1.0.4-ADAMGENT-1

然后会跟1.0.4-ADAMGENT-2,以防您需要进行其他更改。

绝对保留原始项目中的artifactgroup ID以及您基于更改的版本,如果您必须找出哪个版本,这将在以后派上用场你一直在努力。如果您的更改包含在上游,则可以更轻松地切换到正式版。

答案 2 :(得分:2)

如果它是快照,我建议使用原始版本号(可以使用git?)或分叉它的日期,使用ADAMGENT(添加自己的后缀是一个非常好的主意)

e.g。

1.0.4-2011-09-12.ADAMGENT

答案 3 :(得分:1)

我确实找到了自己的解决方案。我不会将它标记为正确,因为我认为@DavidH确实有一些有效点,并且如果Maven具有Ivy替换groupid的配置级别(和/或我在sonatype中找到了怎么做)我可能会标记它正确。否则,我坚信fork应该是一个不同的命名空间,Java包名称应该与您的项目groupid有些内联。同样对于我的情况,我经常需要这样做以修复错误,所以它不是一个分支。

这就是我所做的,它基于maven如何读取版本号以及Sonatype的功能:

首先,我设置了我自己的公共但非中央存储库,我将在其中发布我的版本。您可以使用github和/或googlecode来托管这样的repo。网上有关于如何做到这一点以及如何发布它的指南,所以我不会进入那个。

对于版本号,我遵循以下格式,但Spring除外,因为Spring的构建系统有如我的问题中所述的奇怪要求:

1.0.4-ADAMGENT-1

更多更改和发布:

1.0.4-ADAMGENT-2

您可以看到Maven将主要通过looking at the code了解此格式。问题是ADAMGENT限定符。 Maven只能正确理解一些限定符"alpha", "beta", "milestone", "rc", "snapshot", "", "sp"` and "ga", "final", "cr"

它没有词法排序(在这种情况下为ADAMGENT)这很好,我想你可以提升增量版本(4)如果这是一个问题。