我正在尝试创建一个方法,在其中仍然依靠项目中的SNAPSHOT依赖关系实现密封构建。创建密封Maven构建
例如而言,说我有具有依赖结构这样一个项目:
┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
└ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT
我想要做的是解决所有快照依赖本地的东西这是关系到我的目前的版本,然后将这些版本部署到我的Nexus发布版本中。并非所有的这些依赖都是内部的,所以我不能简单地在每个依赖上进行发布。
因此,在此示例中,other-1.2-SNAPSHOT
会变成类似于other-1.2-mine-1.2.3
和thing-3.1-SNAPSHOT
将变为thing-3.1-mine-1.2.3
。这在约60条蟒蛇线中相对微不足道。
但是,问题在于将可传递的SNAPSHOT解析为具体的版本。所以我也需要将gizmo-6.1.3-SNAPSHOT
转换为gizmo-6.1.3-mine.1.2.3
并且thing-3.1-mine-1.2.3
依赖于它。
这只是一个实现我想要的方法的例子。我的目标是在一两年的时间里,我可以检查我的发行版本1.2.3版本,并且能够运行mvn clean package
或类似的东西,而不用担心解决长久以来SNAPSHOT的依赖关系。
这个分支是可编译的,而不仅仅是使用类似汇编插件的jar-and-dependencies
功能保留所有依赖关系是很重要的。我希望能够修改源文件并进行其他版本构建(例如应用修补程序)。
所以,
- 有这样可用,将能够快照依赖转换以递归的方式是具体什么?
- 有没有可以为你管理这种事情的插件?发布插件已承诺在其
branch
目标上提供一些配置选项,但它无法解决我想要的程度的外部代码。 - 是否有其他技术可用于创建密封Maven构建?
听起来像一个反Maven破解我。在Maven中,基本的基本规则之一是** Convention Over Configuration **。如果依赖是由你自己创建的,你应该自己管理/使用SNAPSHOT/RELEASE版本。如果他们来自其他地方,则应始终使用最新版本(而不是SNAPSHOT版本)。再来看看[Maven The Complete Reference - 3.3.1节](http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-pom-syntax.html#pom-reationships -sect版本),并了解为什么SNAPSHOT在Maven中使用。 – yorkw
我非常全面地了解Maven的基础知识。然而,我生活在现实世界中,期限和第三方库非常有用,但它们在SNAPSHOT版本上的使用时间很长。 Jason Van Zyl,你可能知道,甚至承认围绕版本发布过程繁重系统的想法是一个巨大的错误(并且随特斯拉而改变)。对于我们所消费的所有项目来说,维持内部分配的作用不大,我所做的实际上是比大多数人更好的跳跃。 –
甚至在现实世界中也应该考虑到一些原因。你在这里与系统作战。正如你所提到的,快照不够长 - 即使你使用时间戳快照来依靠工件解析。我的方法是使用依赖和部署插件来检索所有工件,并通过使用脚本或一些自制的Maven插件将已知的快照依赖关系部署到自己的Maven仓库中。也许与其他小玩意交谈也有帮助:如果他们可以发布他们的工件的测试版本,你可以依靠那些没有太多杂乱的东西。 – wemu