首页 > 解决方案 > maven 对 uber jar、local vs jenkins 的依赖

问题描述

我有一个项目 A,它使用某个 3rd 方存储库并依赖于该存储库中的几个 jar。

我用依赖项(一个胖罐子)编译项目 A 并将其上传到我的工件。现在我开始项目 B,但我不希望他拥有那个 3rd 方 repo,因为我需要的所有类都已经在我在工件中的那个胖罐子里了。所以我只在项目 B 中添加项目 A 的依赖项(项目 B 有我的工件作为仓库)

当我在我的詹金斯服务器上构建项目 B 时,一切都很顺利,但是当我尝试在我的本地计算机上编译项目 B 时(可以访问工件)我失败了,因为他试图下载项目 A 的一些依赖项而没有第三个党存储库。

我很清楚这不是最好的工作方式,但我没有得到的是为什么在我的本地环境中我得到错误而詹金斯没有?

我想如果类存在 maven 不会尝试从外部 repo 下载依赖项,并且类存在于我的情况下,如果我进入我的本地 .m2 repo,并查看项目作为 jar,我可以看到类存在.

为什么詹金斯成功了构建而我没有?

标签: mavenjenkinsdependenciesrepository

解决方案


如果您使用相同的 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>

推荐阅读