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

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

据我所知,为了使用 maven-release-plugin,您必须将 scm 部分放入您的 POM 文件中。例如。:

<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>

我了解此数据用于确定要标记的内容以及将更改推送到何处。但是,如果您已克隆/ checkout 代码,这些信息是否已经可用?我对我需要告诉 maven 它需要标记什么代码的概念有点挣扎,至少在理论上,只要问 Git/HG/SVN/CVS 它正在处理什么代码。我怀疑我在细节上遗漏了一些东西,但我不确定是什么。是否可以更改 maven-release-plugin 代码以将其作为要求删除,或者至少将自动检测设为默认值?如果没有,有人可以提供一些关于为什么这不起作用的背景信息吗?

最佳答案

一方面,GIT 和 Subversion 可以有不同的 SCM URI 用于读写和只读访问。

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

很多时候,无法从 checkout 的存储库中推断出规范的 URI。

例如,我可以通过 svn: 查看内部的 Subversion 存储库。协议(protocol)和服务器的 IP 地址,但外部贡献者需要使用 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 (匿名只读)

  • 没关系,您可能已经 checkout git://github.com/zznate/eaio-uuid.git或克隆本地 checkout ,换句话说,您的本地 git 存储库可能“上游”是 ../eaio-uuid-from-nate而不是 git@github.com:stephenc/eaio-uuid.git
    我同意对于某些 SCM 工具,您可以自动检测...例如,如果您知道源已从中 checkout ,例如AccuRev,假设它的详细信息应该没问题...直到您将 Subversion 或 GIT 或 CVS 或其他代码模块 checkin 到 AccuRev 工作区(真实故事),以便可以更新被拉入的标签。

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

    唯一安全的方法是要求 pom 至少定义 SCM 系统,并且对于那些无法可靠推断 URI 的 SCM 系统(想想 CVS、Subversion、GIT、HG,实际上它们中的大多数)需要 URI被指定。

    关于maven - 使用 maven-release-plugin 时,为什么不从本地 repo 中检测 scm 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674481/

    相关文章:

    java - osgi jar从3.8.1升级到3.10.1的问题

    java - 为特定groupId生成依赖关系图

    Maven 发布插件 - 发布 :branch - Version Parameter in -DbranchName

    Maven 发布插件 - svn : E200007: Source and destination URLs appear not to point to the same repository

    Maven - Mercurial/Svn - svn/hg 标记失败,退出代码为 255

    java - 配置 Maven scm 插件以使用 settings.xml 中的 serverID

    java - 多模块项目中测试类的正确位置是什么?

    java - Eclipse/Maven : "Could not find the main class" Errors While Building Executable JAR