Maven对uber jar的依赖,本地vs詹金斯

时间:2018-11-20 15:01:48

标签: maven jenkins dependencies repository

我有一个项目A,该项目使用某个第三方存储库,并依赖于该存储库中的一些jar。

我用依赖项(一个胖子Jar)编译Project A,并将其上传到我的工件中。 现在我开始项目B,但是我不希望他拥有该第三方仓库,因为我需要的所有类都已经在我在人工制品中拥有的那个胖子了。 所以我只在项目B中添加项目A的依赖项(项目B将我的工件作为存储库)

当我在jenkins服务器上构建项目B时,一切正常,但是当我尝试在本地计算机(可以访问工件)上编译项目B时,我失败了,因为他尝试下载项目A的某些依赖项,而没有拥有第三方存储库。

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

我认为如果类存在,那么maven不会尝试从外部存储库下载依赖项,并且如果我进入本地.m2存储库并查看项目,则该类存在于我的情况下,就像jar一样,我可以看到有课程。

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

1 个答案:

答案 0 :(得分:1)

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