我想解決我們的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
屬性的任何提示/建議/示例?