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 个外部依赖项。我假设my-second-moduleivy.xml被正确地从存储库中获取和解析。Ivy 然后应该知道my-second-module的依赖关系

问题是,ivy 没有获取这两个传递依赖项。

从我指定的声明中可以看出,我想检索默认配置,并且它应该是可传递的。

4

1 回答 1

5

如果不查看您如何配置项目,就不可能诊断出任何事情。

我能提供的唯一建议是生成一个 ivy 依赖管理报告并查看“默认”配置。

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

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

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

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

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

于 2012-07-16T15:54:36.277 回答