maven - 多模块本地 jar 依赖项 - Jenkins Pipeline
问题描述
我需要在 Maven 上构建一个 Java 项目。我正在开发一个构建在 Nexus 存储库中的 Jenkins 管道上的多模块 Maven 项目。我有一些在 Nexus 存储库中不可用的库。我无法手动上传库。我正在管道上构建这个项目。
我做了什么:
我在 Git hub 存储库的项目根目录中创建了一个名为 jars 的文件夹,并手动放置了所有在 Nexus 上不可用的 jar 文件。在依赖项中,我在依赖项参数中引用了所有这些本地 jar。
在存储库中,我给出了 jar 文件夹的 git hub 存储库的 URL。詹金斯无法选择图书馆。我收到以下错误:依赖项:依赖项版本 - 构建错误 - 无法为未发布的依赖项构建,并且我收到 jars 文件夹中所有 jar 的错误。我尝试将 jars 文件夹放在 src/main/resources 中,但仍然出现相同的错误。
如何引用这个 jar 文件夹以便 Jenkins Pipeline 可以使用它?我无法控制所涉及的 Jenkins / Scripts。我是一个开发人员,只是在管道上构建它。
PS:我无法在我的公司访问互联网来发布 POM 或构建失败错误。
添加更多细节:
它建立在管道上。有两个存储库:Nexus 2 和 Nexus 3。特定库在 Nexus 3 上不可用,并且管道仅在 Nexus 3 上构建。
我们已经提出了上传这些库的请求,但它不会很快发生。Jenkins Pipelines 从 Github 存储库中获取文件,并使用 Maven 构建 Java 项目。我无法控制管道或 Jenkins 中的任何脚本。
我们下载了所有不可用的库并将其放在 git hub 的文件夹中。流水线中有 4 个周期。Github 周期/Jenkins 周期/部署周期/发布周期。
Github Cycle:在这个循环中,它遵循三个阶段。它从代码中获取代码,构建它。它构建快照并将其上传到 Nexus 存储库。在这两个阶段中,它能够通过从 GitHub 获取代码并构建它并生成工件来成功构建。第三阶段:在这个阶段真的很奇怪,在这个阶段它再次构建和构建失败,引用了在 git hub 中上传的 jar 的非发布依赖项的代码。
这可能是什么原因:当它可以在 Github 周期的前两个阶段构建并在第三阶段因未发布的依赖项的构建失败而失败时。
该管道的设计方式使其仅在 Nexus 3 上查看并在周期的每个阶段构建。
解决方案
在存储库中,我给出了 jar 文件夹的 git hub repo 的 URL
这不起作用,因为您的 lib 文件夹不是有效的 Maven 存储库。
如何引用这个 jar 文件夹以便 Jenkins Pipeline 可以使用它?
你有一些选择:
设置自定义 Maven 存储库管理器。您可以使用Nexus Repository Manager或JFrog Artifactory或其他东西。它将为您提供最大的灵活性,并允许您在未来做更多的事情。不利的一面是,您需要有基础设施来运行它,这通常会带来某种维护成本。
jar
从您已有的文件夹中安装包到 Maven 的本地仓库中。有两种方法可以做到这一点:通过 Jenkins Pipeline 中的脚本在构建之前运行并调用文件夹
mvn install-file ...
中的每个库。您可以在Apache Maven 安装插件站点jar
上找到此命令的确切语法通过更改您的构建并调用早期构建阶段的
install-file
目标maven-install-plugin
。我个人从未这样做过,但这个答案表明这是可能的。
从
jar
文件夹中删除文件并为每个文件创建一个包装器项目,除了在本地 maven 存储库中安装 jar 之外什么都不做。确保这些是在您的多模块项目中运行的第一个模块。
推荐阅读
- mysql - 无法按日期获取最近的记录
- python - UnboundLocalError:分配前引用的局部变量“表单”
- ios - 如何检查按钮形状是否启用?
- android - 适用于 Android 和 IOS 的 Gitlab CI 中的 Delphi Rio DUNITX
- html - HTML 未在 Firefox 和 IE 上显示
- sql - 使用 dense_rank 查找列何时随时间变化
- xamarin - 永远不会调用 PerformFetch
- android - 在 Flutter 的垂直列表中添加动态高度水平列表视图
- android - 单个 concatArrayEager 不订阅所有源
- node.js - Flatmap-stream 有恶意提交,因此被删除。现在我无法运行我的网站,因为它是一个依赖项。关于我应该做什么的任何提示?