【问题标题】:When exactly does maven download dependencies?maven 究竟什么时候下载依赖?
【发布时间】:2020-10-30 22:33:49
【问题描述】:

我已经使用 maven 多年了,但我刚刚意识到需要了解下载依赖项的实际时间(maven 阶段)。我已阅读 maven 文档,但找不到下载依赖项的实际阶段。

以下是我的用例的简化说明:

我有一个 Jenkins Build 工作,它有 2 个阶段(因为我的代码依赖于其他内部项目的快照,所以我使用 -U 来更新快照,因为我想用其他项目的最新快照构建我的代码):

1.快速检查(检查所有代码是否编译)

 mvn test-compile -U

3.慢速检查(构建和单元测试整个代码)

mvn verify -U scoverage:report-only

现在,在执行第 1 步时,如果有人更新了依赖项的快照,我将在不同的快照上运行我的测试编译和验证目标。

我想避免这种情况,并且想知道如果我从第 2 步中删除 -U,那么在运行第 1 步时是否仍会更新所有依赖项?或者,是否存在步骤 1 仅下载与其相关的依赖项以运行测试编译阶段而验证阶段需要超集依赖项的情况?

【问题讨论】:

    标签: maven jenkins maven-2 maven-3


    【解决方案1】:

    目标dependency:resolve 默认绑定到lifecycle phase generate-sources,验证和初始化之后的第三阶段。然后它们都在本地可用。

    同意,只要在同一个 pom 上操作,在第二步中删除 -U 可能是正确的做法。

    这还假设本地存储库是特定于作业的(私有)。默认情况下,maven.local 存储库对用户是通用的,位于 ${user.home}/.m2 中。同一节点上的多个执行程序将共享默认 repo。

    【讨论】:

    • 在不同的运行作业之间共享本地存储库是危险的。本地存储库不是线程安全的。
    • 那是默认配置;不是说这是个好主意。这只是-SNAPSHOT 的问题。权衡是:普通回购 == 更少的远程下载,所以更快。此外,Apache 从未实现本地插件与本地依赖存储库或允许通用发布存储库和私有 SNAPSHOT 存储库,这也不是很好。
    • 比@Ian W. 这正是我想要的。
    【解决方案2】:

    AFAIK 从第二步中删除 -U 是省事的。

    依赖关系都在每次构建开始时解决。

    【讨论】:

    • 是否有这样的参考文档?
    猜你喜欢
    • 2011-11-09
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2014-09-09
    • 2017-12-11
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多