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

时间:2014-12-31 13:00:05

标签: java maven ivy transitive-dependency

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

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

<dependency org="Z" name="A" rev="0.6-SNAPSHOT" conf="*->default"/>

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

<dependency>
      <groupId>X</groupId>
      <artifactId>C</artifactId>
    </dependency>
    <dependency>
      <groupId>X</groupId>
      <artifactId>C</artifactId>
      <type>test-jar</type>
      <scope>test</scope>
</dependency>

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

<dependency org="X" name="C" rev="0.98.8-hadoop2" force="true" conf="test->runtime(*),master(*)"/>
<dependency org="X" name="C" rev="0.98.8-hadoop2" force="true" conf="test->runtime(*),master(*)">
  <artifact name="C" type="test-jar" ext="jar" conf="" m:classifier="tests"/>
</dependency>

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

1 个答案:

答案 0 :(得分:0)

我回顾了nutch project的常春藤用法并道歉,但我的结论是,由于以下原因,它过于复杂:

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

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

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

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

重构常春藤

以下是我目前取得的成就:

优点:

影响以下Nutch问题

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