我正在我的笔记本电脑上开发几个mavenised项目,并定期推送到github。我在云中设置了一个私有哈德森服务器,用于轮询git存储库以获取更新,从而执行构建 - 到目前为止一直很好。
不幸的是,当我在我的笔记本电脑上执行'mvn release:prepare'来执行释放(比如'1.5')时,发生的两次提交(将1.5-SNAPSHOT改为1.5,然后将1.5改为1.6-SNAPSHOT)一起推入我的git repo - 而Hudson显然构建了最近的一个,即1.6-SNAPSHOT - 并且完全忽略了1.5版本。
这没关系,但项目依赖于彼此,我想在我的poms中声明非快照版本。但是,当项目B依赖于项目A的1.5版本时,在Hudson框中的哈德森用户的本地maven存储库中找不到它 - 因为它从未构建过 - 因此项目B的构建失败。
如果我能让Hudson变得更聪明,当它看到maven发行版飞过时,强制构建并安装该特定版本,然后继续构建稍后的快照提交,那就太棒了。
我一直在浏览Hudson插件,特别是'M2 Release Plugin':
http://wiki.hudson-ci.org//display/HUDSON/M2+Release+Plugin
- 但是,该插件似乎更适合手动选择你想要推广到更多官方Maven Repo的构建,而不是强迫Hudson自动构建&安装它遇到的每个版本构建。
更新:我的一些基本要求让我重新思考我想在这里实现的目标 - 抱歉不提前表达它们:
git clone
任何单个项目,签出发布标签,并在没有mvn install
的情况下进行需要任何其他repo的依赖,但maven central。此外:
答案 0 :(得分:2)
您现在需要的是实际执行该版本。引用Maven - Guide to using the release plugin:
执行发布
该插件将提取文件修订版 与当前版本相关联。 Maven将编译,测试和打包 版本化的项目源代码到 一件神器。 最终的可交付成果 然后将被释放到 适当的maven存储库。
release:perform
目标将:
- 提取在新标记名称下版本化的文件修订版。
- 在提取的实例上执行maven构建生命周期 项目
- 将版本化工件部署到适当的本地和远程 存储库即可。
醇>
答案 1 :(得分:0)
您可以指定用于确定是在本地还是远程部署构建的配置文件:
<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>
然后您可以安全地运行release:perform
目标,并通过传入remote.repo.url的值,您还可以选择远程部署。
答案 2 :(得分:0)
我已经更新了我的问题描述以提及我在我的poms中声明非快照依赖项的偏好(至少对于发布版本),以便获得一致的结果(在我的笔记本电脑,哈德森服务器和其他人的检查 - 我真的希望其他人能够检查我的代码,并且在寻找不可知的快照依赖关系时不知所措。
它希望在我的依赖项中使用非快照版本导致这个问题--Hudson的正常行为并没有使“发布”版本变得容易,至少没有等待依赖项的发布版本循环到maven central。
但是,我已经决定,如果我想要忠实于我的基本要求 - 人们可以轻松签出并构建我的代码 - 那么我就必须这样做:即等待maven central同步。 / p>
我只想坚持发布版本(否则我永远不会得到任何完成!),因此很乐意使用快照版开发 - 直到我实际< strong>做想要发布一个版本,此时我希望所有deps都能在maven central中正确使用。
直到最近我还没有意识到有任何方法可以强制执行此操作,但谷歌更多地发现了''执行者'插件:
http://maven.apache.org/enforcer/enforcer-rules/requireReleaseDeps.html
- 将'onlyWhenRelease'标志设置为true,看起来应该完全强制执行我想做的事。
回答我原来的标题问题('如何让Hudson自动构建和安装发布工件,而不仅仅是快照?'),我的答案是: