【问题标题】:maven dependency on uber jar, local vs jenkinsmaven 对 uber jar、local vs jenkins 的依赖
【发布时间】:2019-04-23 01:31:04
【问题描述】:

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

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

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

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

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

为什么 jenkins 构建成功而我没有?

【问题讨论】:

  • 让我提一下,使用 fat jar 作为依赖项通常是个坏主意。更重要的是,如果 fat jar 的 pom.xml 仍然包含所有依赖项,那么 Maven 将尝试下载它们,从而有效地复制您加载的类

标签: maven jenkins dependencies repository


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多