我想解决我们的Ant/Ivy系统中的一些技术债务,我目前的任务之一是解决我们目前有的一些检索后行为。默认情况下,我们的编译系统检索常春藤依赖关系,然后提取压缩后的工件(焦油,TAR.BZ2,gzip的,只有ZIP)到依赖文件夹,使我们的项目有一个一致的依赖位置:蚂蚁常春藤后检索触发器
(project.root)/dependency/.archive <- the compressed dependency location
(project.root)/dependency/extracted-foo` <- the uncompressed dependency
提取发生在post-retrieve-artifact trigger
中,以便我们获得某些元数据(路径,名称,类型等)的所有优点,所有元素都以'dep'为前缀。
我们目前有一个属性可以设置为关闭此默认在ivy.xml文件中指定的所有依赖关系的行为,因此,我们只剩下一个全有或全无的情况,如果我们想要中间的东西,我们现在必须使用我们的build.xml文件并编写一些自定义代码T他是痛苦的,因为元数据不容易获得。
我想保留使用all-or-nothing标志,但允许项目选择性地提取项目 - 我们有几个项目的build.xml文件将大大简化,如果我们可以将提取过程敲到一个属性本身。
因此,我的想法是在artifact
标记上使用extra
属性来“插入”此信息并覆盖ivy.retrieve.pattern
以搜索此属性。
的ivy.xml
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<dependencies>
<dependency org="my.org" name="foo" rev="${foo.version}" conf="${conf.archive}->*" transitive="false">
<artifact name="megapin" type="war" e:expand="expand"/>
</dependency>
</dependencies>
</ivy-module>
在build.xml
这是我觉得我遇到麻烦expand
额外的属性展现出来。
问题1:这会在检索时将“extract”属性添加到工件名称。我可以使用contains
条款,以检查是否是有在dep.to
有没有一种方法来检索extra
属性(例如,${dep.extra.expand}
?
<property name="ivy.retrieve.pattern" value="${dependency.dir}/[conf]/[artifact]-[rev])(-[expand]).[ext]"/>
</property>
<target name="ivy-post-retrieve-trigger">
<local name="doexpand"/>
<condition property="doexpand">
<contains string="${dep.to}" substring="expand" casesensitive="false"/>
</condition>
<!-- this step works if the flag is set properly, so I'm leaving out these non-relevant steps-->
<...extract if:isset="doexpand"... />
ivysettings.xml
该文件主要有触发器等域名解析设置
<triggers>
<ant-call target="ivy-post-retrieve-trigger" prefix="dep" event="post-retrieve-artifact"/>
</triggers>
问题2:任何sugges tions在“noexpand”的名字?我对<contains>
条款的关注是“扩展”会一直受到打击。
我想我已经接近完成这项工作 - 但我得到的唯一信息是:Property "doexpand" has not been set
,因此它正在跳过提取步骤。 Q3有关如何在带Ant/Ivy的trigger
上使用extra
属性的任何提示/建议/示例?