使用Git发布多模块maven项目

Jos*_*one 30 git github maven

我正在尝试发布一个使用git作为SCM的多模块maven项目,我遇到的第一个问题是maven发布插件构建release.properties scm.url的方式.我的父POM看起来像这样:

<packaging>pom</packaging>
<groupId>org.project</groupId>
<artifactId>project-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>

<scm>
    <connection>scm:git:git://github.com/username/project.git</connection>
    <developerConnection>scm:git:git@github.com:username/project.git</developerConnection>
    <url>http://github.com/username/project</url>
</scm>

<modules>
    <module>api</module>
    <module>spi</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

模块POM很简单:

<parent>
    <groupId>org.project</groupId>
    <artifactId>project-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>api</artifactId>
<version>0.2.2</version>
Run Code Online (Sandbox Code Playgroud)

我的目标是能够发布单个模块,因为它们各自具有不同的版本,并且我不希望每次发布时都将所有版本一起增加.

当我切换到api目录并执行以下操作时,mvn release:clean release:prepare我遇到了以下输出:

[INFO] Executing: cmd.exe /X /C "git push git@github.com:username/project.git/api master:master"
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to commit files
Provider message:
The git-push command failed.
Command output:
ERROR: Repository not found.
Run Code Online (Sandbox Code Playgroud)

看起来maven发布插件通过将模块名称附加到其上来创建scm.url developerConnection,这最终不是github上的有效存储库.我不确定设置它的正确方法是什么.可能是Maven + git +发布单个子模块根本不起作用的情况?任何输入都表示赞赏.

bma*_*ies 14

要了解如何使其工作,请查看一个工作示例,例如:

https://github.com/sonatype/sonatype-aether

但是,如果您想要发布单件,这将无济于事.在这种情况下,您只需将<scm>元素复制到所有poms中.

这是关于maven dev列表讨论的一个活跃主题,但是不要屏住呼吸从那里获得解决方案; 这是一个大问题.

  • 看起来该项目从顶层POM发布而不是像我想要的那样从单个模块中释放.当我尝试从其中一个模块的目录中释放时,我遇到了问题.由于模块版本不同而且我不想同时增加所有模块版本,因此能够发布单个模块对我来说非常重要. (2认同)

Gra*_*ray 12

我通过搜索"git-push命令失败"找到了这个问题.我有一个类似的配置,我有一个master-pom然后我发布的子模块作为他们自己的maven包.

为了使它工作,我不得不调整以下的scm部分pom.xml.特别需要调整连接才能正常工作.github的所有人都没有工作.

<scm>
    <url>https://github.com/XXX/YYY</url>
    <connection>scm:git:ssh://git@github.com/XXX/YYY.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/XXX/YYY.git</developerConnection>
</scm>
Run Code Online (Sandbox Code Playgroud)

XXX上面的例子就是你的用户名GitHub的.您不能使用:XXXformat(git@github.com:XXX/...),因为过去的值:被解释为端口号.这YYY显然是XXX帐户下的存储库名称.

我刚刚成功使用此模式逐个发布了所有3个子模块.