我正在尝试创建一种可以实现密封构建的方法,同时仍然依赖于项目中的 SNAPSHOT 依赖项。
出于示例的目的,假设我有一个项目,其依赖结构如下:
┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
└ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT
我想做的是将所有 SNAPSHOT 依赖项本地解析为与我当前版本相关的内容,然后将它们作为版本部署到我的 Nexus 版本存储库。并非所有这些依赖项都是内部依赖项,因此我不能简单地对每个依赖项进行发布。
所以,在这个例子中,other-1.2-SNAPSHOT
会变成类似的东西other-1.2-mine-1.2.3
and thing-3.1-SNAPSHOT
会成为thing-3.1-mine-1.2.3
。这对于 60 行左右的 Python 来说是相对微不足道的。
然而,问题在于将传递快照解析为具体版本。所以我还需要转换gizmo-6.1.3-SNAPSHOT
to 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
程序集插件的功能。我希望能够修改源文件并进行另一个版本构建(例如,应用修补程序)。
So,
- 是否有类似的东西可以将 SNAPSHOT 依赖关系以递归方式转换为具体的?
- 有没有插件可以为您管理此类事情?该发布插件承诺在其上提供一些配置选项
branch
目标,但它不能将外部部门解决到我想要的程度。
- 是否有其他技术可用于创建密封 Maven 构建?
这不是一种广泛使用的技术,但您始终可以将特定的 SNAPSHOT 依赖项作为“项目”存储库检查到项目中,如本博客文章中所述:Maven 之于蚂蚁,就像钉枪之于锤子
简而言之,使用 Dependency Plugin 创建存储库位于您的项目目录中。以下内容是从链接的博客文章中复制的(您应该阅读):
1) Run mvn -Dmdep.useRepositoryLayout=true -Dmdep.copyPom=true dependency:copy-dependencies
“这将使用所有项目依赖项的类似存储库的布局创建 /target/dependencies”
2) Copy target/dependencies/
类似的东西libs/
3) 将如下所示的存储库声明添加到您的 POM 中:
<repositories>
<repository>
<releases />
<id>snapshots-I-need-forever</id>
<name>snapshots-I-need-forever</name>
<url>file:///${basedir}/libs</url>
</repository>
</repositories>
您可以将此作为构建/发布过程的自动化部分:步骤 1 通过将依赖项插件配置到生命周期阶段,步骤 2 使用 AntRun 插件将下载的依赖项移动到正确的位置。
希望这对你有用。我现在得去洗澡了...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)