当您使用 git 时,Maven pom.xml - <scm> 内的 <tag> 元素的用法是啥

Posted

技术标签:

【中文标题】当您使用 git 时,Maven pom.xml - <scm> 内的 <tag> 元素的用法是啥【英文标题】:What is the usage of Maven pom.xml - <tag> element inside of <scm> when you are using git当您使用 git 时,Maven pom.xml - <scm> 内的 <tag> 元素的用法是什么 【发布时间】:2014-07-06 06:47:53 【问题描述】:

我们将 maven 和 git 一起用于 Java 项目。在&lt;scm&gt;部分,&lt;tag&gt;由发布插件自动添加。

例如,

  <scm>
          <connection>scm:git:http://myserver:7990/scm/project/test.git</connection>
          <tag>releaes-tag</tag>
  </scm>

&lt;tag&gt; 在这里代表什么?

我相信正常的约定是&lt;tag&gt;HEAD&lt;/tag&gt;.

我们在使用subversion的时候,maven从来没有用过&lt;tag&gt;&lt;/tag&gt;

&lt;tag&gt;&lt;/tag&gt;是什么意思?

我搜索了 google 和 maven 文档,但找不到任何相关信息。

【问题讨论】:

【参考方案1】:

release:prepare 使用&lt;tag&gt; 元素来指定为此版本创建的标签(实现为MRELEASE-723)。在发布之外,它本质上是一个占位符,HEAD 是一个合适的值。

我们在使用subversion的时候,maven从来没有用过&lt;tag&gt;&lt;/tag&gt;

正如MRELEASE-723 解释的那样:

当我调用 release:prepare 时 像这样的网址: https://example.test/svn/REPO/myproject/branches/release 会的 替换为https://example.test/svn/REPO/myproject/tags/myproject-1.0 这很好,因为现在您知道要签出哪个版本 构建版本。

发布版本的&lt;scm&gt; 元素应该包含足够的信息来检查为此版本创建的标签。

Subversion 允许将标签包含在连接 URL 中。 Git 和 Mercurial 都不允许这样做,因此使用 &lt;tag&gt; 元素代替。

【讨论】:

但是在分支上(工件的快照版本)我可以简单地删除&lt;tag&gt;HEAD&lt;/tag&gt; 对吗?并让它在发布标签的 Maven 版本上自动设置。还是它总是在发布后将其添加回 HEAD? 也许我只是粗心,但我仍然不明白需要在&lt;scm&gt; 部分自动添加&lt;tag&gt;。当我看到它时,我倾向于将其删除,但它会不断弹出。 因此,&lt;tag&gt; 的值在运行release:prepare 目标时是唯一选择的(提示用户输入)。之后的目标是将这样的值粘贴到&lt;scm&gt;/&lt;tag&gt; 下的pom.xml 中,只是为了存储这些信息? technical maven project descriptor 的引用(即 POM 文件的技术规范)指出 &lt;tag&gt; 元素的默认值确实是 HEAD,所以当你不这样做时,这是假定的'不指定标签(就像jar&lt;packaging&gt; 元素的默认值一样)。

以上是关于当您使用 git 时,Maven pom.xml - <scm> 内的 <tag> 元素的用法是啥的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上使用 git 发布多模块 maven 项目

Maven 3.0 的“mvn release:perform”不喜欢不在其 git repo 根目录中的 pom.xml

Maven 发布分支失败,错误=7,参数列表太长

maven会在啥时候更新所有jar

mvn 发布:准备在 git 推送操作时失败?

pom中更换阿里云仓库时不要忽略了pluginRepositories