我正在尝试mvn release:prepare在Gitlab服务器上托管的多模块项目.
在pom.xml我的主POM包含:
<scm>
<connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git</connection>
<url>http://my-git-server.example.com/git/somebody/my-project</url>
</scm>
Run Code Online (Sandbox Code Playgroud)
当我这样做时mvn release:prepare -DautoVersionSubmodules=true,它编译所有内容并运行测试,但随后失败:
[INFO] Executing: /bin/sh -c cd /home/somebody/git/my-project && git tag -F /tmp/maven-scm-1594218362.commit my-project-1.0.0
[INFO] Working directory: /home/somebody/git/my-project
[INFO] Executing: /bin/sh -c cd /home/somebody/git/my-project && git push http://my-git-server.example.com/git/somebody my-project-1.0.0
[INFO] Working directory: /home/somebody/git/my-project
...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project iwes-lib-master: Unable to tag SCM
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] fatal: repository 'http://my-git-server.example.com/git/somebody/' not found
[ERROR] -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
所以它告诉我maven-release-plugin认为我的Git存储库的父目录是存储库,在那里拯救.
添加一个developerConnection没有帮助.
尝试使用SVN时,它失败并显示"拒绝访问:
<scm>
<connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git</connection>
<developerConnection>ssh://git@my-git-server.example.com:10022/somebody/my-project.git</developerConnection>
<url>http://my-git-server.example.com/git/somebody/my-project</url>
</scm>
Run Code Online (Sandbox Code Playgroud)
给我:
[INFO] Executing: /bin/sh -c cd /home/jra/Documents/git/my-project && git push ssh://git@my-git-server.example.com:10022/somebody my-project-master-1.0.0
....
[ERROR] Access denied.
Run Code Online (Sandbox Code Playgroud)
因此,它再次使用父目录.
如何强制发布插件使用我在那里声明的真实URL?
我通过这样的电话遇到了同样的问题
mvn deploy scm:tag
Run Code Online (Sandbox Code Playgroud)
我正在使用 gitlab 安装,它也不允许这样的调用
[INFO] Executing: /bin/sh -c cd /home/user/prog/gitlab/test-user_server && git tag -F /tmp/maven-scm-482134407.commit test-user_server-1.1-SNAPSHOT
[INFO] Working directory: /home/user/prog/gitlab/test-user_server
[INFO] Executing: /bin/sh -c cd /home/user/prog/gitlab/test-user_server && git push user@gitlab.my.server:testplus/test-user_server.git refs/tags/test-user_server-1.1-SNAPSHOT
[INFO] Working directory: /home/user/prog/gitlab/test-user_server
[ERROR] Provider message:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] Permission denied, please try again.
Run Code Online (Sandbox Code Playgroud)
问题是这个调用
/bin/sh -c cd /home/user/prog/gitlab/test-user_server && git push user@gitlab.my.server:testplus/test-user_server.git refs/tags/test-user_server-1.1-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
但这个调用并不是真正必要的,因为我在 git 存储库的根目录中启动 mvn。相反,像下面这样的命令行调用可以工作。
git push origin refs/tags/test-user_server-1.1-SNAPSHOT
因此,我将 pom.xml 中的 scm 配置修改为如下所示的字符串,它对我来说就像一个魅力。
<scm>
<developerConnection>scm:git:origin</developerConnection>
</scm>
Run Code Online (Sandbox Code Playgroud)
我在Linux操作系统下开发,所以我没有测试它是否也可以在Windows系统上运行。
正如一些人所说,这些解决方法可以使发布的准备阶段工作,但不能使执行阶段工作(在我的例子中就是这样)。通过找到输入数据以放置developperConnection标签的正确方法,我终于成功地发布了完整的版本:
<scm>
<developerConnection>scm:git:git@gitlab.company.com:groupProject/project.git</developerConnection>
<tag>HEAD</tag>
</scm>
Run Code Online (Sandbox Code Playgroud)
在我的例子中,许多其他 URL 格式都被接受,但最终在发布的执行或准备阶段失败了(scm:git:ssh://git@gitlab... 例如就遇到了这个问题)。我不知道这个解决方案是否特定于 Gitlab 或者可能是我的项目,但我花了很多时间寻找这个解决方法......
编辑:我在这里提出的解决方法不起作用release:perform,事实上,直到今天我才找到可行的解决方案。我现在正在手动进行发布,如下所述。
我对这个问题进行了更多研究,我认为这是一个错误。我为其提交了 JIRA:MRELEASE-900
我转储maven-release-plugin并现在按照以下方式手动进行发布(示例:版本 1.3.0,快照版本是 1.3.0-SNAPSHOT):
git checkout master && git pull只是要确定git checkout -b release-1.3 && git push -u origin release-1.3cd path/to/my/master/projectmvn versions:set,它要求我指定 的新版本1.3.0-SNAPSHOT,我输入1.3.0git commit -a所以新版本已签入git tag release-1.3.0git push && git push --tags- 此时,release-1.3.0分支中有一个标签release-1.3,其中包含所有相关的 POM 版本号1.3.0git checkout mastergit merge release-1.3- 还没有提交,我首先更新版本。mvn versions:set,设置新的 SNAPSHOT 版本,按照我的惯例,这将是1.4.0-SNAPSHOTgit commit -agit push然后,我可以在标签上创建 Jenkins 作业或我喜欢的内容release-1.3.0来处理发布。
-- 旧答案供参考--
经过摸索和尝试各种事情后,我取得了一些进展:我必须让 maven-release-plugin 认为这my-project.git是一个目录,并向 URL 添加一个人造文件。
以下作品:
<scm>
<connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</connection>
<developerConnection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</developerConnection>
<url>http://my-git-server.example.com/git/somebody/my-project</url>
</scm>
Run Code Online (Sandbox Code Playgroud)
与 tSSH 相同:
<scm>
<connection>scm:git:http://my-git-server.example.com/git/somebody/my-project.git/.git</connection>
<developerConnection>ssh://git@my-git-server.example.com:10022/somebody/my-project.git/.git</developerConnection>
<url>http://my-git-server.example.com/git/somebody/my-project</url>
</scm>
Run Code Online (Sandbox Code Playgroud)
现在release:prepare可以工作,但release:perform失败,因为它想从ssh://git@my-git-server.example.com:10022/somebody/my-project.git/.git.
| 归档时间: |
|
| 查看次数: |
9691 次 |
| 最近记录: |