ArtifactId使用Maven Release Plugin附加到SCM Url

kev*_*dez 11 git bitbucket maven-release-plugin

我有一个所有项目的主POM.POM包含以下SCM部分:

    <groupId>com.company</groupId>
    <artifactId>master</artifactId>
    <version>...</version>
    <packaging>pom</packaging>

    <scm>
        <connection>scm:git:https://user@bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</connection>
        <developerConnection>scm:git:https://user@bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</developerConnection>
        <url>https://bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</url>
        <tag>HEAD</tag>
    </scm>

<properties>
     <project.scm.id>bitbucket-scm</project.scm.id>
     <scm.project.name>maven-master</scm.project.name>
     <scm.repository.name>tsu</scm.repository.name>
</properties>
Run Code Online (Sandbox Code Playgroud)

现在,我有一个maven多模块项目,这是父POM:

    <parent>
        <groupId>com.company</groupId>
        <artifactId>master</artifactId>
        <version>...</version>
    </parent>

    <groupId>com.company.group</groupId>
    <artifactId>project-foo</artifactId>
    <version>...</version>
    <packaging>jar</packaging>

    <name>project FOO</name>

    <properties>
        <scm.project.name>project-foo</scm.project.name>
    </properties>
Run Code Online (Sandbox Code Playgroud)

执行发布插件以释放主POM(第一个片段)时,它工作正常.但是,当执行发布插件以释放多模块项目(第二个片段)时,它会失败,说:

[错误]无法执行目标org.apache.maven.plugins:maven-release-plugin:2.5.3:在project project-foo上准备(default-cli):无法提交文件[ERROR]提供者消息:[ERROR] git-push命令失败.[ERROR]命令输出:[ERROR]致命:远程错误:未找到存储库[错误]请求的存储库不存在,或者您没有[错误]访问它的权限.

在日志中,我还可以看到存储库URL.

对于Master POM的工作版本,它使用

https:// user:********@ bitbucket.server.de/scm/tsu/maven-master.git refs/heads/dev:refs/heads/dev

对于多模块项目的非工作版本,它使用

https:// user:********@ bitbucket.server.de/scm/tsu/project-foo.git/project-foo refs/heads/dev:refs/heads/dev

在发布多模块项目时,似乎将项目的工件ID附加到URL.

将整个SCM部分复制到多模块项目并进行修改时,它可以正常工作.但是,我只想在主POM中插入单个属性,以避免将SCM标记复制到每个项目.

任何有助于解决此问题的帮助表示赞赏.

小智 6

Maven 版本较旧或等于 3.6.1

Maven 3.6.1开始,您可以在 pom 父级中设置以下内容:

<scm child.scm.connection.inherit.append.path="false"  
     child.scm.developerConnection.inherit.append.path="false"  
     child.scm.url.inherit.append.path="false">  
  <connection>scm:git:https://user@bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</connection>  
  <developerConnection>scm:git:https://user@bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</developerConnection>  
  <url>https://bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</url>  
  <tag>HEAD</tag>  
</scm>  
Run Code Online (Sandbox Code Playgroud)

3.6.1之前的Maven版本

您必须在子 poms 中重新定义 scm :

<scm child.scm.connection.inherit.append.path="false"
     child.scm.developerConnection.inherit.append.path="false"
     child.scm.url.inherit.append.path="false">  
  <connection>scm:git:https://user@bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</connection>  
  <developerConnection>scm:git:https://user@bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</developerConnection>  
  <url>https://bitbucket.server.de/scm/${scm.repository.name}/${scm.project.name}.git</url>  
  <tag>HEAD</tag>  
</scm>  
Run Code Online (Sandbox Code Playgroud)