当前位置: 首页 > 面试题库 >

常春藤无法解决依赖关系的范围,它是传递依赖关系的依赖关系

阴宏爽
2023-03-14
问题内容

我在ivaven.xml中添加了一个依赖项(让我们将其命名为A),它在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>

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


问题答案:

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

  • “编译”和“测试”目标分别发出对resolve任务的调用
  • 每个插件还调用一个常春藤解决任务
  • 维护类路径的复杂逻辑。可以使用cachepath任务和ivy配置进行简化。
  • 构建插件不受常春藤(声纳,日食,老鼠)管理

我开始重构构建,但是当我意识到我不了解主要的坚果工件和插件之间的关系时不得不停下来……(我发现NUTCH-1515的方法很艰辛……浪费大量时间。
feed插件缺少相关性)。

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

总之,这项工作不能回答您的问题,但是我认为我至少需要记录几个小时的分析结果:-)鉴于NUTCH-1371,我不知道您的项目是否可以忍受主要的常春藤重构?

这是我到目前为止所取得的成就:

  • 坚果项目的私人“发展”分支
  • 与树干的差异

好处:

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

影响以下Nutch问题

  • NUTCH-1881:此新方法删除了“解析测试”和“解析默认”目标,并使用常春藤代替$ {build.lib.dir}管理类路径。
  • NUTCH-1805:可以凭借自己的依赖关系轻松地为作业目标设置单独的配置。
  • NUTCH-1755:我认为可以通过为build.xml分配一个名称来解决此问题(请参阅:diff)


 类似资料:
  • 编写的PHP扩展需要需要依赖另外一个扩展,在PHP-X中可以调用Extension->require来实现。 PHPX_EXTENSION() { Extension *ext = new Extension("test", "0.0.1"); ext->require("swoole"); ext->require("sockets"); return ext;

  • 依赖关系 这是一个非常轻量级的模块,没有其他依赖项。希望大家在JVM或Android上使用以太坊的RLP编码的项目时会选择使用这个模块,而不再编写自己的实现。

  • 依赖关系 ABI一个非常轻量级的模块,唯一的第三方依赖是 Bouncy Castle,用于hash加密 (Spongy Castle on Android)。 最后希望java和安卓开发者,在JVM或Android上有以太坊ABI合作的项目时会选择使用这个模块,而不是再编写自己的实现。

  • 问题内容: 我有一个依赖关系如下: 当我部署一切正常时,这将拉下另一个引发ClassDefNotFound的依赖项。 我添加了两个依赖项,如下所示: 并且仍然面临着同样的问题,即:MVN带来下来不 我该如何解决? 编辑: 添加; 问题答案: 您可能有一个传递依赖项,另一个依赖项取决于您不需要的版本。 要获得所有直接和传递依赖关系的概述,请尝试: mvn依赖项:树 如果您发现同一依赖项的不同版本之间

  • 我有一个奇怪的问题,< code > mvn clean install-d project . version = 1 或< code>jenkins build运行正常,但当我在IDE中打开模块时,intellij变得非常愤怒,这影响了开发。 我在intellij日志中看到以下问题 POM 代码受版权保护,所以不能透露,但这是一个基本大纲 < li>fabric-common:基本模块(用于绑

  • 问题内容: 我有一个二进制文件,其中ldd显示了意外的依赖项和libicuuc(来自“ icu”)。 由于在该系统上libxml动态依赖于libicuuc,因此ldd最终会找到它是有意义的,但是是否期望libicuuc也出现在A的ldd输出中?是否有一些命令仅检索链接为依赖项依赖关系的库? 问题答案: 显示启动应用程序或加载共享库时需要加载的所有库。 仅显示二进制文件的直接依赖项。 是否有一些命令