有人能解释常春藤.xml依赖关系的conf属性吗?

2022-08-31 14:20:22

我找不到任何关于 Ivy 依赖项标签的 conf 属性的详尽解释:

<dependency org="hibernate" name="hibernate" rev="3.1.3" conf="runtime, standalone -> runtime(*)"/>

看到 conf 属性了吗?我找不到任何关于符号右侧的解释(我能理解)。请记住,我不知道关于Maven的第一件事,所以请用这个考虑来解释这个属性。->

是的,我已经看过这个:http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html

谢谢 丹


答案 1

首先,Ivy不是Maven;)
Maven2是一个软件项目管理和理解工具,而Ivy只是一个依赖管理工具。

Ivy在很大程度上依赖于一种称为配置的独特概念。
在Ivy中,模块配置是使用或查看模块的一种方式
例如,您可以在模块中进行测试和运行时配置。但你也可以有一个MySQL和一个Oracle配置。或者休眠和 JDBC 配置。

在每个配置中,您可以声明:

  • 需要什么文物(罐子,战争等)。
  • 您对其他模块的依赖关系,并描述您需要的依赖关系配置。这称为配置映射。

因此,conf 属性正是这样做的:描述依赖项的配置映射。
映射的子元素是“符号的右侧”,表示映射的依赖项配置的名称。 通配符可用于指定此模块的所有配置。->'*'

參見更多關於 Charlie Hubbard 的「最簡單的常春藤配置解釋

其中重要的部分是Ivy下载依赖项并组织它们。

常春藤模块(即文件)有两个主要部分:ivy.xml

  • 您需要哪些依赖项?
  • 您希望它们如何组织?

第一部分在元素下配置。
第二个由元素控制<dependencies><configurations>

当 Ivy 下载这些依赖项时,它需要知道在提取这些传递依赖项时要使用哪些作用域(我们是否将其用于测试、运行时、编译等?)。我们必须告诉 Ivy 如何将我们的配置映射到 Maven 示波器,以便它知道要拉取什么。


Maven2在其侧面有一种叫做范围的东西。
可以将依赖项声明为测试范围或生成时范围的一部分。
然后,根据此作用域,你将获得依赖项项目(在 maven2 中每个模块只有一个项目)及其依赖项,具体取决于其作用域。作用域在 maven2 中是预定义的,您无法更改它。

这意味着:

为许多库下载了许多不必要的依赖项。
例如,Hibernate下载了一堆JBoss JAR,Display Tag下载了所有各种Web框架JAR。我发现自己排除的依赖项几乎与我添加的依赖项一样多。

问题是休眠可以与几个缓存实现,几个连接池实现一起使用,...这不能用示波器来管理,其中Ivy配置为此类问题提供了优雅的解决方案。
例如,在Ivy中,假设hibernate有一个像这样的Ivy文件,那么你可以声明一个这样的依赖项:

<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->proxool,oscache"/>

通过其proxool和oscache实现进入休眠状态,就像这样:

<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->dbcp,swarmcache"/>

使用 dbcp 和 swarmcache 进行休眠。

通过将默认配置映射到 “” 或 “”,可以从模块“休眠”中指定确切需要的内容。masterproxool,oscachedbcp,swarmcache


你可以找到那些“proxool,...”参数,方法是列出为与库关联的每个模块定义的 Ivy 配置。例如:

<ivy-module version="2.0">
<info organisation="ssn-src" module="pc"/>
<configurations defaultconfmapping="default->default">
    <conf name="default" />
    <conf name="provided" description="they are provided by the env." />
    <conf name="compile" extends="default,provided" />
    <conf name="war" extends="default"/>
</configurations>
<dependencies>

示例

假设有两个配置,默认和测试。
作为一个实际问题,想要省略依赖项元素的属性是非常不寻常的。
的 可能具有依赖关系:modAconfivy.xmlmodA

<dependency org="theteam" name="modB" rev="1.0" conf="default->*" />

您是从默认值开始的,而不是从默认和测试开始的。

上面的示例使 modA 的默认值依赖于 modB 的 conf1、conf2 和 conf3。
或者你可能想说modA的默认值只取决于modB的conf1:

<dependency org="theteam" name="modB" rev="1.0" conf="default->*conf1*" />

答案 2

我已经阅读了这些答案,坦率地说,我发现它们并没有多大帮助。我认为它们可以改进,所以我通过展示一个实际的例子写下了我如何使用和理解配置:

http://wrongnotes.blogspot.com/2014/02/simplest-explanation-of-ivy.html

不幸的是,您必须对maven及其依赖项有一点了解,因为Ivy正在使用Maven存储库下载这些jar文件。因此,艾薇必须了解Maven,然后它就会传回给你。但是,我认为我保持了它非常简单,而没有过多地介绍maven。


推荐