2012-01-03 52 views
4

我的本地文件系統中有一個神器,但Ivy無法解決它,除非我將<文件系統>解析器放在<鏈>內。它在解決它時重命名工件擴展。Ivy在文件系統中找不到我的神器

這裏是我的ivy.xml:

<ivy-module version="2.0"> 
    <info organisation="apache" module="hello-ivy"/> 
    <dependencies> 
     <dependency org="myorg" name="mymodule" rev="1.1-SNAPSHOT"/> 
    </dependencies> 
</ivy-module> 

這是我的ivysettings.xml:

<ivysettings> 
    <settings /> 

    <resolvers> 
     <filesystem name="local"> 
     <artifact pattern="/path/to/my/artifact/[module]/dist/[module]-[revision].zip" /> 
     </filesystem> 
    </resolvers> 
</ivysettings> 

我的build.xml:

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="deps"> 

    <target name="deps" description="--> retrieve dependencies with ivy"> 
    <ivy:settings file="ivysettings.xml"/> 
    <ivy:resolve /> 
    <ivy:retrieve /> 
    </target> 
</project> 

神器.zip文件。這是在正確的地方與正確命名(按照<神器>的模式屬性,但是當我運行螞蟻,它未能解決的神器:

[ivy:resolve] :::: WARNINGS 
[ivy:resolve]  :::::::::::::::::::::::::::::::::::::::::::::: 
[ivy:resolve]  ::   UNRESOLVED DEPENDENCIES   :: 
[ivy:resolve]  :::::::::::::::::::::::::::::::::::::::::::::: 
[ivy:resolve]  :: myorg#mymodule;1.1-SNAPSHOT: no resolver found for myorg#mymodule: check your configuration 
[ivy:resolve]  :::::::::::::::::::::::::::::::::::::::::::::: 
[ivy:resolve] :::: ERRORS 
[ivy:resolve] unknown resolver null 
[ivy:resolve] no resolver found for myorg#mymodule: check your configuration 

爲什麼它不找到我的模塊?

然後:如果我把<文件系統>元素的<鏈內>元素,它解析:

[ivy:resolve] found myorg#mymodule;1.1-SNAPSHOT in local 
[ivy:resolve] downloading /path/to/my/artifact/mymodule/dist/mymodule-1.1-SNAPSHOT.zip 
[ivy:resolve] ..................(lots of dots here).....(37899kB) 
[ivy:resolve] [SUCCESSFUL ] myorg#mymodule;1.1-SNAPSHOT!mymodule.jar (430ms) 

所以這就是爲什麼怪迪d <連鎖>有什麼區別? 順便說一句,爲什麼我的模塊現在是一個JAR?來源是一個ZIP文件,我發誓。這也是正確的 - 我只是重建了ZIP文件,最新的更改在我的JAR文件中。艾維爲什麼重命名它?

回答

8

默認type of an artifact in ivy is jar and the default extension is jar, too. 這將導致重命名。

你必須定義你所依賴的是這樣的(明確定義神器):

<dependency org="myorg" name="mymodule" rev="1.1-SNAPSHOT"> 
    <artifact name="mymodule" type="zip" conf="A,B"/> 
</dependency> 

但是你必須正確地定義文件系統解析:

<filesystem name="local"> 
    <artifact pattern="/path/to/my/artifact/[module]/dist/[module]-[revision].[ext]" /> 
    </filesystem> 

最好的方法是定義一個適合你的特殊依賴關係的ivy.xml,它明確定義了可用的工件。並把它放在你的dist文件夾中。

參見:

而且它往往是與ant -v調試常春藤當運行螞蟻是個好主意。這將提供很多額外的信息。

+1

謝謝@oers,這解釋了爲什麼我的ZIP成爲JAR;如果我把元素放在那裏,我會得到我的ZIP。任何有關其他部分的想法 - 即爲什麼元素是必要的? – Ladlestein 2012-01-03 18:40:17

+1

@ladlestein nope,它應該沒有工作。您是否嘗試過使用新的設置? – oers 2012-01-03 19:28:32

+1

@ladlestein要避免鏈式解析器,請嘗試在* settings *標記中指定一個** defaultResolver =「local」**屬性:http://ant.apache。org/ivy/history/latest-milestone/settings/settings.html – 2012-01-03 21:18:39

相關問題