2012-01-03 2 views
4

У меня есть артефакт в моей локальной файловой системе, но Ivy не разрешает его, если я не поставил < файловую систему > resolver внутри цепочки < >. И он переименовывает расширение артефакта, когда он его разрешает.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 файл , Это в нужном месте и названо правильно (в соответствии с < артефактом > атрибутом шаблона «s Но когда я бегом муравья, он не решает артефакт:.

[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 < цепь > сделать разницу? И BTW, почему мой модуль теперь 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

+1

@ladlestein nope, он должен работать без. Вы снова попробовали свои новые настройки? – oers

+1

@ladlestein Чтобы избежать цепного распознавателя, попробуйте указать атрибут ** defaultResolver = "local" ** в теге * settings *: http: //ant.apache.org/ivy/history/latest-milestone/settings/settings.html –