问题 如何自定义Maven发布插件的标签格式?


在我们的SVN仓库中,我们存储这样的标签:

trunk
    project_a
    project_b
branches
    project_a
        branch_x
        branch_y
    project_b
tags
    project_a
        1.0
        1.1
    project_b
        1.0

当我运行Maven发布插件时“准备“项目A上的目标,默认情况下它会将标记创建为”tags / project_a-xx“,这与我上面的标记命名方案不匹配。因此,我依赖于发布的任何人(即一个易犯错的人)来发现这个和将标记更改为“tags / project_a / xx”。如何告诉发布插件默认使用正确的格式?

“准备”目标有一个“标签声称执行此操作的配置选项,但如果我将其设置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <tag>${project.artifactId}/${project.version}</tag>
    </configuration>
</plugin>

...然后创建的标签是“tags / project_a / x.x-SNAPSHOT”,即它使用预发行版本号而不是发行版本号。将标签名称硬编码到POM中似乎也是错误的。

如何确保标签默认正确?


10811
2017-12-17 00:27


起源

看到 我的评论 下面。在v2.4中再次破坏了此行为。实际上,发布插件的v2.1是目前唯一正常工作的插件。 - Duncan Jones


答案:


发布插件现在支持 tagNameFormat  配置选项,默认为 @{project.artifactId}-@{project.version}。在您的情况下,您可以执行以下操作:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <tagNameFormat>@{project.artifactId}/@{project.version}</tagNameFormat>
    </configuration>
</plugin>

9
2017-12-14 21:28



请注意 V2.1 是此行为正常工作的最新版本。从那个版本开始,代码库被打破了 -SNAPSHOT 使用版本。看到 这个bug 了解更多信息。 - Duncan Jones
请注意@ {project.version}中的at符号非常重要。类似的$ {project.version}只是从pom.xml获取版本。我没有$和@的意义? - Josh


看起来这是不可能的,直到修复了其中一个错误:

  • MRELEASE-150:无法在不影响版本的情况下为标记添加前缀 (未安排)
  • MRELEASE-159:支持模式以生成发布标记 (预定2.2)
  • MRELEASE-259:提供要在发布时使用的默认标记/标签的配置设置 (未安排)

2
2017-12-17 00:42



MRELEASE-159在2.2中被标记为固定,其他两张票被标记为重复。我不再使用SVN了,但是我已经改变了Lyle的接受答案,它记录了新的tagNameFormat选项。 - Andrew Swan


如果您正在传递releaseVersion,则可以执行以下操作:

<tag>${project.artifactId}/${releaseVersion}</tag>

0
2018-03-01 14:01