Git 如何使哈德逊自动生成&;安装发布工件,而不仅仅是快照?

Git 如何使哈德逊自动生成&;安装发布工件,而不仅仅是快照?,git,maven-2,hudson,maven-release-plugin,Git,Maven 2,Hudson,Maven Release Plugin,我正在我的笔记本电脑上开发几个mavenised项目,并定期向github推广。我已经在云中设置了一个私有的hudson服务器,它可以轮询git存储库的更新,从而执行构建—到目前为止还不错 不幸的是,当我在笔记本电脑上执行“mvn发布:准备”以执行发布(比如“1.5”)时,发生的两个提交(将1.5-SNAPSHOT更改为1.5,然后将1.5-1.6-SNAPSHOT)一起推到我的git repo中,Hudson显然构建了最新的版本,即1.6-SNAPSHOT,并且完全忽略了1.5版本 这没什么大

我正在我的笔记本电脑上开发几个mavenised项目,并定期向github推广。我已经在云中设置了一个私有的hudson服务器,它可以轮询git存储库的更新,从而执行构建—到目前为止还不错

不幸的是,当我在笔记本电脑上执行“mvn发布:准备”以执行发布(比如“1.5”)时,发生的两个提交(将1.5-SNAPSHOT更改为1.5,然后将1.5-1.6-SNAPSHOT)一起推到我的git repo中,Hudson显然构建了最新的版本,即1.6-SNAPSHOT,并且完全忽略了1.5版本

这没什么大不了的,但是这些项目相互依赖,我想在我的POM中声明非快照版本。然而,当项目B依赖于项目A的1.5版时,在哈德逊盒子上的哈德逊用户的本地maven存储库中找不到它——因为它从未构建过——因此项目B的构建失败

如果我能让Hudson变得更聪明一点,当它看到一个maven发布版本飞过时,在继续构建稍后的快照提交之前,强制构建并安装该特定版本,那就太好了

我一直在浏览Hudson插件,尤其是“M2发布插件”:

-然而,这个插件似乎更倾向于手动选择一个你想要升级到更正式的Maven Repo的构建,而不是强迫Hudson自动构建并安装它遇到的每个版本构建

更新:我的一些基本要求让我重新思考我想在这里实现的目标-为没有提前表达道歉:

  • 大多数项目都是开源的或最终打算开放的,我希望任何人都能够
    git克隆
    任何单个项目,签出发布标签,并执行
    mvn安装
    ,而不需要任何其他依赖项的repo,但maven central除外
  • 为了获得一致的结果(在我的笔记本电脑、hudson服务器和其他人的签出中),这显然表明我更倾向于在POM中声明非快照依赖项(至少对于发布版本)
  • 这让我走上了让Hudson“mvn安装”发布工件的道路,因为它们呼啸而过,这样以后,Hudson building project B就不会在找不到project A的发布版本时失败(这就是这个问题的来源)
此外:

  • 我使用sonotype出色的oss托管,这需要GPG签名——我不想把我的GPG密钥存储在任何我拿不到的硬件上:)——所以把它塞进云中的Hudson服务器是不可能的
  • 从精神上讲,让Hudson服务器发布对我来说有点陌生——我真的只想让它用于CI

您现在需要的是实际执行发布。引述:

执行发布 该插件将提取文件修订 与当前版本关联。 Maven将编译、测试和打包 将项目源代码版本化为 人工制品最终可交付成果 然后将发布到 适当的maven存储库

release:perform
目标将:

  • 提取新标记名下版本的文件修订
  • 在的提取实例上执行maven构建生命周期 项目
  • 将版本化工件部署到适当的本地和远程位置 存储库
  • 工具书类

    您可以指定用于确定构建是本地部署还是远程部署的配置文件:

    <project>
        <profile>
            <id>local-deploy</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <distributionManagement>
                <repository>
                    <id>local-repo</id>
                    <name>My Local Repo</name>
                    <url>file://my/local/repo/dir</url>
                </repository>
            </distributionManagement>
        </profile>
        <profile>
            <id>remote-deploy</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>remote.repo.url</name>    
                </property>
            </activation>
    
            <distributionManagement>
                <repository>
                    <id>remote-repo</id>
                    <name>My Remote Repo</name>
                    <url>${remote.repo.url}</url>
                </repository>
            </distributionManagement>
        </profile>
    </project>
    
    
    本地部署
    真的
    本地回购
    我的本地回购协议
    file://my/local/repo/dir
    远程部署
    假的
    remote.repo.url
    远程回购
    我的远程回购
    ${remote.repo.url}
    

    然后您可以安全地运行
    发布:执行
    目标,通过为remote.repo.url传递一个值,您还可以选择远程部署。

    我更新了我的问题描述,提到了我在POM中声明非快照依赖项的偏好(至少对于发布版本),以获得一致的结果(通过我的笔记本电脑、hudson服务器和其他人的签出)-我真的希望其他人能够签出我的代码,并且不去寻找不可知的快照依赖项

    正是想在我的依赖项中使用非快照版本导致了这个问题——Hudson的正常行为并没有使使用“发布”版本变得容易,至少在不等待依赖项的发布版本循环到maven central的情况下是如此

    然而,我已经决定,如果我想忠实于我的基本需求——人们可以轻松地签出并构建我的代码——那么这就是我必须做的:即等待maven central同步

    我只想在发布版本中坚持这一点(否则我永远不会完成任何事情!),因此我很乐意使用snapshot deps进行开发,直到我真正想发布一个版本,我希望所有的deps都能在maven central中正常使用

    直到最近,我才意识到有任何方法可以强制执行,但更多的谷歌搜索发现了我的“enforcer”插件:

    -当“onlyWhenRelease”标志设置为true时,它看起来应该完美地执行我想要做的事情

    那么,在回答我最初的标题问题时('如何c