我找不到常春藤依赖标记的 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
谢谢,
丹
答案 0 :(得分:74)
首先,Ivy is not Maven;)
Maven2是一个软件项目管理和理解工具,而Ivy只是一个依赖管理工具。
Ivy严重依赖于一种称为配置的独特概念 在Ivy中,模块配置是使用或查看模块的方式 例如,您可以在模块中进行测试和运行时配置。但您也可以拥有MySQL和Oracle配置。或者是Hibernate和JDBC配置。
在每种配置中,您都可以声明:
因此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>
我们假设
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)
这帮助我一次以这种方式理解事物: