首页 文章

正确配置常 Spring 藤传递依赖

提问于
浏览
0

我的项目由n个模块组成 . 其中之一,假设它被称为my-first-module声明,其中包括一个依赖:

<dependency org="com.mycompany.myproject" name="my-second-module" conf="default->default" rev="1.0-SNAPSHOT"/>

工件存储在内部存储库中,该存储库在检索jar时正常工作 .

出于调试目的,我运行:

ant -d | grep my-second-module

输出说:

sorting dependencies of com.mycompany.myproject#my-second-module / # of dependencies : 2

这是正确的,因为第二个模块声明了2个外部依赖项 . 我假设我的第二个模块的ivy.xml被正确获取并从存储库中解析 . 然后Ivy应该知道my-second-module的依赖关系

The problem is, ivy is not fetching those 2 transitive dependencies.

正如您在我指定的声明中所看到的,我想要检索默认配置,它应该是可传递的 .

1 回答

  • 5

    如果没有看到你如何配置项目,就无法诊断任何东西 .

    我可以提供的唯一建议是生成常 Spring 藤依赖关系管理报告并查看“默认”配置 .

    <target name="init" description="Resolve dependencies">
        <ivy:resolve/>
        <ivy:report todir="${build.dir}/ivy-report" graph="false"/>
        ..
        ..
    </target>
    

    也许传递依赖关系被其他已解析的模块所覆盖 . 例如,两个模块可以检索同一模块的不同修订版,在这种情况下,常 Spring 藤将选择一个并“驱逐”另一个模块 . 另一种可能性是模块声明排除,这将解释缺少传递依赖性 .

    最后,让我们通过“获取”明确你的意思.... Ivy将“解决”依赖关系,这意味着它将分析每个模块并用各种文件填充它的本地缓存 . Ivy有一个单独的“检索”任务,用于将文件放入本地构建工作区 .

    <ivy:retrieve pattern="${dist.dir}/WEB-INF/lib/[artifact].[ext]" conf="runtime"/>
    

    所以......这意味着当你运行常 Spring 藤时,文件实际上可能无法从远程存储库下载,因为常 Spring 藤已经将它们安全地隐藏在它的缓存中 . (通常位于$ HOME / .ivy2 / cache)

相关问题