使用maven-release-plugin时,为什么不从本地repo中检测scm信息呢?

时间:2013-02-03 16:13:34

标签: maven maven-release-plugin maven-scm-plugin

据我所知,为了使用maven-release-plugin,你必须将scm部分放入POM文件中。 E.g:

<scm>
    <connection>scm:hg:ssh://hg@bitbucket.org/my_account/my_project</connection>
    <developerConnection>scm:hg:ssh://hg@bitbucket.org/my_account/my_project</developerConnection>
    <url>ssh://hg@bitbucket.org/my_account/my_project</url>
    <tag>HEAD</tag>
</scm>

我知道这些数据用于确定要标记的内容以及推送更改的位置。但是,如果您克隆/签出了代码,那么这些信息是否已经可用?我正在努力解决这个概念,我需要告诉maven它需要标记什么代码,至少在理论上,只要问Git / HG / SVN / CVS它正在处理什么代码。我怀疑我在细节上遗漏了什么,但我不确定是什么。是否可以更改maven-release-plugin代码以将其作为一项要求删除,或者至少使自动检测成为默认值?如果没有,有人可以提供一些关于为什么不起作用的背景?

1 个答案:

答案 0 :(得分:2)

首先,GIT和Subversion可以使用不同的SCM URI进行读写和只读访问。

这是不同的<connection><developerConnection> URI应该捕获的内容。第一个是保证读访问的URI。第二个是保证写访问的URI。

通常从签出的存储库中,无法推断规范URI。

例如,我可能会通过svn:协议和服务器的IP地址在内部检查Subversion存储库,但外部贡献者需要使用https://和主机名。

或者甚至使用GIT存储库,在Github上,您对不同的访问机制有不同的URI,例如

  • https://github.com/stephenc/eaio-uuid.git(使用用户名/密码或OAuth进行读写)
  • git@github.com:stephenc/eaio-uuid.git(使用SSH私钥标识进行读写)
  • git://github.com/stephenc/eaio-uuid.git(匿名只读)

没关系,您可能已经签出git://github.com/zznate/eaio-uuid.git或克隆了本地签出,换句话说,您的本地git存储库可能是&#34;上游&#34;是../eaio-uuid-from-nate而不是git@github.com:stephenc/eaio-uuid.git

我同意对于某些SCM工具,您可以自动检测...例如,如果您知道源是从中检出的,例如AccuRev,你应该可以假设它的细节......直到你点击Subversion或GIT或CVS或其他代码模块检查到AccuRev工作区(真实故事),以便可以更新被拉入的标签。

简而言之,检测代码必须确保您没有同时使用两个SCM系统以确定哪个是主SCM ...而另一个SCM甚至可能不会离开标记文件在磁盘上嗅出(例如,AccuRev,没有...因此我选择了它)

唯一安全的方法是要求pom定义,至少是SCM系统,以及那些无法可靠地推断URI的SCM系统(想想CVS,Subversion,GIT,HG,实际上大部分都需要)要指定的URI。