Айви не находит мой артефакт в файловой системе - PullRequest
4 голосов
/ 03 января 2012

У меня есть артефакт в локальной файловой системе, но Айви не разрешит его, пока я не положу решатель внутри . И он переименовывает расширение артефакта, когда разрешает его.

Вот мой 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. Он находится в нужном месте и назван правильно (в соответствии с атрибутом pattern . Но когда я запускаю ant, он не может разрешить артефакт:

[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)

Так странно. Почему сделал разницу? И кстати, почему мой модуль теперь JAR ??? Источник - ZIP-файл, клянусь. Это тоже правильный вариант - я просто перестроил ZIP, и последние изменения в моем файле JAR. Почему Айви переименовала его?

1 Ответ

8 голосов
/ 03 января 2012

Тип артефакта по умолчанию в ivy - это jar, а расширением по умолчанию также является jar. Это приведет к переименованию.

Вы должны определить свою зависимость следующим образом (явно определить артефакт):

<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 при отладке плюща. Это даст отличную дополнительную информацию.

...