java - Ivy 无法解析依赖关系的范围,该依赖关系是传递依赖关系的依赖关系

标签 java maven ivy transitive-dependency

我向 ivy.xml 添加了一个依赖项(让我们将其命名为 A),该文件在 Maven 中心有一个 pom 文件。 Ivy 使用 ibiblio 来解决 Maven 依赖关系。添加到ivy.xml 的依赖项(A) 具有传递依赖项(B)。到目前为止一切顺利。传递依赖(B)的依赖(C)无法通过ivy解决。

我在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>

当我在ivy的缓存文件(~/.ivy2/cache/X/C/ivy-0.98.8-hadoop2.xml)中查看由ivy解析的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>

因此,ivy 无法正确定义 C 作用域。根据记录,我无权修改 pom 文件,因为它们是第三方项目。我该如何解决它?

最佳答案

我回顾了 nutch project 的 Ivy 用法抱歉,但我的结论是它过于复杂,原因如下:

  • “编译”和“测试”目标分别向解析任务发出调用
  • 每个插件还调用 ivy 解析任务
  • 维护类路径的复杂逻辑。可以使用 cachepath 进行简化任务和ivy配置。
  • 构建插件不由 ivy(Sonar、eclipse、rat)管理

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

我还注意到问题 NUTCH-1371呼吁拆除 Ivy 。如果不对当前代码库进行重大更改,这将是一次棘手的重构。我怀疑它必须是一个多模块构建,每个插件都列出自己的依赖项。

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

重构ivy

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

好处:

影响以下 Nutch 问题

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

关于java - Ivy 无法解析依赖关系的范围,该依赖关系是传递依赖关系的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721507/

相关文章:

java - 从 Ms Access 数据库切换到 Hibernate 支持的数据库

eclipse - 从 ant + ivy 迁移到 gradle

java - 如何禁用 karaf-maven-plugin 4 严格依赖约束检查

angular - 核心.js :30235 Uncaught TypeError: Cannot read property 'id' of undefined

java - Ant Ivy : How to retrieve source code for all levels of dependencies?

java - 使用Java NIO读写大文件

java - 如何搜索值,然后在找到该值时修改文件中的当前值

java - 如何将 CSV 文件中的日语字段读取到 java beans 中?

maven - 无法在Maven存储库中找到 Artifact

java - 并行运行 maven 测试而不等待兄弟模块依赖项