有人可以解释ivy.xml依赖的conf属性吗?

时间:2009-03-16 23:36:11

标签: java apache ant 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

谢谢,

4 个答案:

答案 0 :(得分:74)

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

Ivy严重依赖于一种称为配置的独特概念 在Ivy中,模块配置是使用或查看模块的方式 例如,您可以在模块中进行测试和运行时配置。但您也可以拥有MySQL和Oracle配置。或者是Hibernate和JDBC配置。

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

  • 需要什么文物(jar,war,...)。
  • 您对其他模块的依赖关系,并描述您需要的依赖项配置。这称为配置映射。

因此conf属性的确如此:描述依赖关系的配置映射 mapped child element是您“->符号的右侧”,表示映射的依赖关系配置的名称。 '*'通配符可用于指定此模块的所有配置。


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

这意味着:

  

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

问题在于hibernate可以与几个缓存实现,几个连接池实现一起使用......而且这不能用范围来管理,常春藤配置为这类问题提供了一个优雅的解决方案。
例如,在Ivy中,假设hibernate有一个像这样的常春藤文件,那么你可以声明一个像这样的依赖:

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

通过其proxool和oscache实现来获得hibernate,就像那样:

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

使用dbcp和swarmcache获取休眠。

通过将默认master配置映射到“proxool,oscache”或“dbcp,swarmcache”,您可以从模块“hibernate”中指定完全所需的内容


您可以通过列出为与库关联的每个模块定义的Ivy配置来查找这些“proxool,...”参数。例如:

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

Example

  

我们假设modA有两种配置,默认和测试   实际上,想要省略依赖元素的conf属性是非常不寻常的。
  ivy.xml的{​​{1}}可能具有依赖关系:

modA
  

你是从默认开始,而不是默认和测试。

     

以上示例使modA的默认值取决于modB的conf1,conf2和conf3   或者您可能想说modA的默认值仅取决于modB的conf1:

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

答案 1 :(得分:15)

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

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

不幸的是,你必须对maven及其依赖关系有所了解,因为Ivy正在使用Maven存储库来下载这些jar文件,因此Ivy必须了解Maven并将它传递给你。但是,我认为我保持简单,不用太多关于maven的细节。

答案 2 :(得分:13)

感谢VonC!

它帮助了我更多。

对于选项(配置)tieTYT,您可以在常春藤存储库的常春藤[版本号] .xml文件中找到它们:组织名称 - &gt;模块名称。

http://www.springsource.com/repository/app/下载的JUnit 4.6修订版中的示例配置元素。

<configurations>
    <conf name="compile" visibility="public" description="Compile dependencies"/>
    <conf name="optional" visibility="public" extends="compile" description="Optional dependencies"/>
    <conf name="provided" visibility="public" description="Provided dependencies"/>
    <conf name="runtime" visibility="public" extends="compile" description="Runtime dependencies"/>
</configurations>

在我的项目的ivy.xml文件中,我有一个配置编译测试。在dependencies元素中,我有以下依赖项:

<dependency org="org.junit" name="com.springsource.org.junit"
        rev="4.6.0" conf="compile-test->compile" />

如您所见,我的编译测试配置取决于JUnit的ivy.xml文件中的编译配置。

答案 3 :(得分:7)

这帮助我一次以这种方式理解事物:

  1. 常春藤配置只是模块工件某些子集的名称。
  2. 模块之间的依赖关系是根据配置名称指定的。