我的项目由 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个外部依赖项。我假设 my-second-module 的 ivy.xml 正确地从存储库中获取并解析。然后Ivy应该知道 my-second-module
的依赖关系问题是,常春藤没有获取这两个传递依赖。
从我指定的声明中我可以看到,我想要检索默认配置,它应该是可传递的。
答案 0 :(得分:5)
如果没有看到你如何配置项目,就无法诊断任何东西。
我可以提供的唯一建议是生成常春藤依赖关系管理报告并查看“默认”配置。
<target name="init" description="Resolve dependencies">
<ivy:resolve/>
<ivy:report todir="${build.dir}/ivy-report" graph="false"/>
..
..
</target>
传递的依赖关系可能被其他已解析的模块所覆盖。例如,两个模块可以检索同一模块的不同修订版,在这种情况下,常春藤将选择一个并“驱逐”另一个模块。另一种可能性是模块声明排除,这将解释缺少传递依赖性。
最后,让我们通过“获取”明确你的意思.... Ivy将“解决”依赖关系,这意味着它将分析每个模块并使用各种文件填充它的本地缓存。 Ivy有一个单独的“检索”任务,用于将文件放入本地构建工作区。
<ivy:retrieve pattern="${dist.dir}/WEB-INF/lib/[artifact].[ext]" conf="runtime"/>
所以......这意味着当你运行常春藤时,文件实际上可能无法从远程存储库下载,因为常春藤已经将它们安全地藏在了它的缓存中。 (通常位于$ HOME / .ivy2 / cache)