maven - maven 对 uber jar、local vs jenkins 的依赖
问题描述
我有一个项目 A,它使用某个 3rd 方存储库并依赖于该存储库中的几个 jar。
我用依赖项(一个胖罐子)编译项目 A 并将其上传到我的工件。现在我开始项目 B,但我不希望他拥有那个 3rd 方 repo,因为我需要的所有类都已经在我在工件中的那个胖罐子里了。所以我只在项目 B 中添加项目 A 的依赖项(项目 B 有我的工件作为仓库)
当我在我的詹金斯服务器上构建项目 B 时,一切都很顺利,但是当我尝试在我的本地计算机上编译项目 B 时(可以访问工件)我失败了,因为他试图下载项目 A 的一些依赖项而没有第三个党存储库。
我很清楚这不是最好的工作方式,但我没有得到的是为什么在我的本地环境中我得到错误而詹金斯没有?
我想如果类存在 maven 不会尝试从外部 repo 下载依赖项,并且类存在于我的情况下,如果我进入我的本地 .m2 repo,并查看项目作为 jar,我可以看到类存在.
为什么詹金斯成功了构建而我没有?
解决方案
如果您使用相同的 Jenkins 节点来构建您最初构建项目 A 的项目 B,则 Maven 使用来自本地 Maven 存储库的 A 的依赖项。尝试清理它,然后在那里构建项目 B - 工作仍然成功吗?
您可以在项目 B 中使用以下依赖项声明来排除 A 的所有传递依赖项:
<dependency>
<groupId>groupA</groupId>
<artifactId>artifactA</artifactId>
<excludes>
<exclude>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclude>
</excludes>
</dependency>
推荐阅读
- powerbi - 需要将当前月份与过去 3 个月的平均值进行比较
- django - 如何在 Django 2.1 中包含 DRF 3.8 路由器 url 模式
- kotlin - 如何根据传入参数向 Exposed DAO API“.find”添加多个过滤条件
- javascript - 来自两个数组(Javascrip / Typescript)的元素组合的逻辑
- php - 如何在laravel中添加碳中的差异
- laravel - 我如何通过 laravel 找到 long 和 lat 附近的地方
- php - Textarea $_POST 没有返回值
- php - Magento 2 如何将自定义属性添加到发票电子邮件和发票 PDF
- docker - 为特定的 ubuntu 版本安装特定版本的 apt 包
- apache-spark - 如何在 spark-submit 命令中引用 .so 文件