Ivy无法解决依赖的范围,依赖关系是传递依赖的依赖关系

我将一个依赖项(我们将其命名为A)添加到ivy.xml,它在maven central中有一个pom文件。 Ivy使用ibiblio来解析maven依赖项。 添加到ivy.xml的依赖项(A)具有传递依赖性(B)。 到目前为止一直很好。 传递依赖(B)的依赖性(C)不能由常春藤来解决。

我在ivy.xml中定义了A,如下所示:

default"/> 

在B的pom文件中,C在编译和测试范围中定义,如下所示:

  X C   X C test-jar test  

当我查看常春藤在常春藤的缓存文件(〜/ .ivy2 / cache / X / C / ivy-0.98.8-hadoop2.xml)中解析的B的xml文件时,它看起来像这样:

 runtime(*),master(*)"/> runtime(*),master(*)">   

因此,常春藤无法正确定义C范围。 为了记录,我没有权限修改pom文件,因为它们是第三方项目。 我该如何解决?

我回顾了荷兰项目的常春藤用法和道歉,但我的结论是,由于以下原因,它过于复杂:

  • “compile”和“test”目标正在发出对resolve任务的单独调用
  • 每个插件也调用常春藤解析任务
  • 用于维护类路径的复杂逻辑。 可以使用cachepath任务和常春藤配置进行简化。
  • 构建插件不是由常春藤(声纳,日食,老鼠)管理

我开始重构构建,但是当我意识到我不理解主要的nutch神器和插件之间的关系时我不得不停下来……(我发现NUTCH-1515的方法很难…大时间浪费了feed插件缺少依赖项)。

我也注意到问题NUTCH-1371要求拆除常春藤。 如果没有对当前代码库进行重大更改,这将是一个棘手的重构。 我怀疑它必须是一个多模块构建,每个插件都列出了自己的依赖项。

总之,这项工作没有回答你的问题,但我认为我至少需要记录几小时分析的结果:-)根据NUTCH-1371,我不知道你的项目是否会容忍主要的常春藤重构?

重构常春藤

以下是我迄今取得的成就:

  • 私人“开发”荷兰项目的分支
  • 差异与树干

优点:

  • 单一常春藤报告显示所有配置(新常春藤 – 解决目标 )
  • 安装常春藤的新机制(新常春藤安装目标 )
  • 使用常春藤配置管理类路径(请参阅常春藤文件中常春藤缓存路径任务和配置的使用)
  • 使用常春藤自动安装Eclipse,声纳和鼠标ANT任务(Eclipse插件值得注意,因为它使用打包程序解析程序从tar存档下载并提取jar)。

影响以下Nutch问题

  • NUTCH-1881 :这种新方法删除了resolve-test和resolve-default目标,并使用常春藤而不是$ {build.lib.dir}来管理类路径
  • NUTCH-1805 :可以使用它自己的依赖项轻松地为作业目标设置单独的配置。
  • NUTCH-1755 :我认为通过为build.xml指定一个名称来修复这个问题(参见: diff )