创建 Hermetic Maven 构建

2023-11-23

我正在尝试创建一种可以实现密封构建的方法,同时仍然依赖于项目中的 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(使用前将#替换为@)

创建 Hermetic Maven 构建 的相关文章

随机推荐

  • 通过存储过程从 SQL 导出二进制文件数据(图像)

    我正在尝试导出相当大量的图像文件 这些图像文件作为二进制数据内部存储在 SQL 数据库中 作为在 SQL 中编写存储过程的新手 我遇到了一些关于如何归档存储过程的非常有用的指南 但我似乎遗漏了一些东西 我正在本地运行 SQL Server
  • PostgreSQL 的 CLUSTER 与 SQL Server 中的聚集索引有何不同?

    很多帖子都喜欢这个 stackoverflow 链接声称 PostgreSQL 中没有聚集索引的概念 然而 PostgreSQL 文档包含类似的东西 有些人声称它类似于 SQL Server 中的聚集索引 您知道这两者之间的确切区别是什么
  • Backbone js 集合的集合问题

    当我尝试使用主干 js 创建集合的集合时 我遇到了问题 这是代码 型号和系列 var Track Backbone Model extend defaults title var TrackCollection Backbone Colle
  • 设置回调函数,该函数是类的非静态成员函数

    typedef void CALLBACK class Filter public void callback cout lt lt callback lt lt endl void SetCallback CALLBACK pCallBa
  • 如何在spark上将json字符串转换为dataframe

    我想将下面的字符串变量转换为 Spark 上的数据帧 val jsonStr metadata key 84896 value 54 我知道如何从 json 文件创建数据框 sqlContext read json file json 但我
  • Docker Desktop无法切换到Windows Container

    I have installed latest Docker Desktop Currently unable to switch to Windows container The option is blocked from task b
  • Docker1.12 Worker 无法加入集群(Swarm:待定)

    经理版Docker version 1 12 0 rc5 build a3f2063 工人版Docker version 1 12 0 rc5 build a3f2063 创建 Swarm 管理器 docker swarm init adv
  • 异步方法不等待函数

    我遇到了这个错误 尽管在 MDN 和这里进行了大量研究 但还没有解决它 我正在尝试使用异步和等待 但 JavaScript 不会等待 等待 函数结束 这里是 methods async search terms done console l
  • 如何使用 Visual Studio 加载项打开 TFS 变更集详细信息对话框视图?

    我在 TFS 中有一个特定的工件 例如变更集 123 它具有 URI vstfs VersionControl Changeset 123 我意识到链接 http tfs 8080 tfs web UI Pages Scc ViewChan
  • 如何跨域postMessage?

    的文档发布消息意味着跨域消息传递是可能的 然而 When the popup has fully loaded if not blocked by a popup blocker 这不是一个非常清楚的注释how真正做到这一点 想象一下两个网
  • 每个会话的 NH 请求 - “会话已关闭!”

    NHibernate版本 2 1 我正在使用似乎非常标准的 HttpModule 方法来在 ASP NET NHibernate 应用程序中实现每个请求会话 我正在尝试利用杠杆WebSessionContext 但它似乎无法正常工作 具体来
  • 如何通过按下 NSButton 来显示键盘?

    我只知道在 iOS 上显示键盘的几种方法 触摸文本字段 搜索栏 文本视图 是否可以通过触摸按钮来显示键盘 如果按钮没有标题或可以重命名 我希望可以使用这种方式设置按钮标题 谢谢各位 您需要添加一个UITextField查看您的视图 然后致电
  • 如何使用 FParsec 解析注释

    我正在尝试使用 FParsec 从 s 表达式语言解析 lisp 风格的注释 我在上一个线程中解析单行注释时得到了一些帮助 如何转换 FParsec 解析器来解析空格 虽然这个问题已经解决 但我仍然需要解析多行注释 这是当前的代码 Read
  • 使用 GUID 的一部分作为 ID

    我正在开发 ASP Net MVC 应用程序 我的行动之一需要id作为参数 例如 public actionresult Detail Guid id return View 正如你所看到的 我正在使用Guid代替Int 这个问题更具装饰性
  • 是否可以知道哪些 SciPy / NumPy 函数在多个内核上运行?

    我试图明确找出 SciPy NumPy 中的哪些函数在多个处理器上运行 我可以例如在 SciPy 参考手册中读到 SciPy 使用了这个 但我更感兴趣的是到底哪些函数确实运行并行计算 因为并非所有函数都这样做 理想的情况当然是当您键入 he
  • GHCi 中的功能非详尽模式

    我想创建一个显示列表最后一个元素的函数 这是我的代码 ghci gt let myLast a gt a ghci gt let myLast error ghci gt let myLast x x ghci gt let myLast
  • “重新打开上次关闭的选项卡”导致显示上次 ajax 请求内容

    我正在使用 HTML 5 历史 api 在 ajax 请求发生时保存状态 并且如果用户请求没有 ajax 请求的同一页面 我会提供完整的 html 内容 浏览器的 重新打开最后关闭的选项卡 功能会带来最后的 ajax 请求内容 而无需访问服
  • 为什么错误处理在 Nodemailer 中不起作用?

    我正在尝试使用 nodemailer 设置一个非常简单的联系表单 它工作正常 但我的问题是它不处理错误 如果引发错误 页面应该重定向 但重定向不会发生并且应用程序停止运行 我一生都无法弄清楚为什么会发生这种情况 这是我的代码 if req
  • d3.js:有限制的平移

    我正在研究具有平移功能的基本线性图表 我设法通过限制图表元素的拖动范围d3 event translate values var tx Math max 0 d3 event translate 0 ty Math min 0 d3 eve
  • 创建 Hermetic Maven 构建

    我正在尝试创建一种可以实现密封构建的方法 同时仍然依赖于项目中的 SNAPSHOT 依赖项 出于示例的目的 假设我有一个项目 其依赖结构如下 other 1 2 SNAPSHOT mine 1 2 3 thing 3 1 SNAPSHOT