我向 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 文件,因为它们是第三方项目。我该如何解决它?
我回顾了常春藤的用法纳奇项目抱歉,但我的结论是它过于复杂,原因如下:
- “编译”和“测试”目标对解析任务发出单独的调用
- 每个插件也调用一个ivy解析任务
- 维护类路径的复杂逻辑。可以使用简化缓存路径任务和常春藤配置。
- 构建插件不由 ivy 管理(Sonar、Eclipse、Rat)
我开始重构构建,但当我意识到我不理解主要的 nutch 工件和插件之间的关系时,不得不停止......(我发现NUTCH-1515艰难的方式...浪费大量时间 feed 插件缺少依赖项)。
我也注意到了问题NUTCH-1371呼吁拆除常春藤。如果不对当前代码库进行重大更改,这将是一次棘手的重构。我怀疑它必须是一个多模块构建,每个插件都列出自己的依赖项。
总之,这项工作并没有回答你的问题,但我认为我至少需要记录几个小时分析的结果:-) 鉴于NUTCH-1371不知道你的项目是否能够容忍重大的ivy重构?
重构常春藤
以下是我到目前为止所取得的成就:
好处:
- 显示所有配置的单个常春藤报告(新ivy-解决目标)
- 安装ivy的新机制(Newivy安装目标)
- 类路径使用 ivy 配置进行管理(请参阅 ivy 的使用缓存路径任务和ivy 文件中的配置)
- 使用ivy自动安装Eclipse、声纳和rat ANT任务(Eclipse插件值得注意,因为它使用打包解析器下载并从 tar 存档中提取 jar)。
影响以下 Nutch 问题
-
NUTCH-1881:这种新方法删除了resolve-test和resolve-default目标,并使用ivy而不是${build.lib.dir}来管理类路径
-
NUTCH-1805:可以轻松地为作业目标设置单独的配置及其自己的依赖项。
-
NUTCH-1755:我认为这个问题可以通过为 build.xml 指定一个名称来解决(请参阅:diff)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)