Подтвердить что ты не робот

Айви не может разрешить зависимость, не в состоянии найти причину

При использовании ivy:retrieve он не может разрешить зависимость, которая должна быть загружена. Результат выглядит следующим образом:

Buildfile: C:\Users\Simon\workspace\apollo\build.xml
init:
resolve:

BUILD FAILED
C:\Users\Simon\workspace\apollo\build.xml:42: Problem: failed to create task or type antlib:org.apache.ivy.ant:retrieve
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
No types or tasks have been defined in this namespace yet

This appears to be an antlib declaration. 
Action: Check that the implementing library exists in one of:
        -C:\Users\Simon\eclipse\plugins\org.apache.ant_1.8.2.v20120109-1030\lib
        -C:\Users\Simon\.ant\lib
        -a directory added on the command line with the -lib argument


Total time: 348 milliseconds

Соответствующий раздел build.xml выглядит так:

  <target name="resolve" depends="init">
    <ivy:retrieve pattern="${lib}/[artifact]-[revision].[ext]" sync="true" />
  </target>

Вот также список того, что он должен скачивать (из build.xml)

  <target name="doc" depends="build">
    <javadoc sourcepath="${src}" classpathref="libraries" access="private" destdir="${doc}" windowtitle="Apollo">
      <doclet name="org.jboss.apiviz.APIviz" pathref="libraries">
        <param name="-sourceclasspath" value="${bin}" />
        <param name="-author" />
        <param name="-version" />
        <param name="-use" />
        <param name="-nopackagediagram" />
      </doclet>
      <doctitle><![CDATA[<h1>Apollo</h1>]]></doctitle>
      <link href="#" onclick="location.href='http://download.oracle.com/javase/6/docs/api/'; return false;" />
      <link href="#" onclick="location.href='http://docs.jboss.org/netty/3.2/api/'; return false;" />
      <link href="#" onclick="location.href='http://guava-libraries.googlecode.com/svn/trunk/javadoc/'; return false;" />
      <link href="#" onclick="location.href='http://www.junit.org/apidocs/'; return false;" />
      <link href="#" onclick="location.href='http://commons.apache.org/compress/apidocs/'; return false;" />
      <link href="#" onclick="location.href='http://jruby.org/apidocs/'; return false;" />
    </javadoc>
  </target>
4b9b3361

Ответ 1

ANT не может найти банку плюща. Необходимо загрузить его в одно из следующих мест:

  • $ANT_HOME/Библиотека
  • $HOME/.ant/Библиотека

Включение плюща

Ivy упакован как antlib, поэтому для его включения вам необходимо выполнить следующие

1) Объявите пространство имен плющ в верхней части файла сборки

<project ..... xmlns:ivy="antlib:org.apache.ivy.ant">

2) Включите банку плюща в один из каталогов библиотек ant

В вашем сообщении об ошибке указаны некоторые из возможных мест для antlib:

This appears to be an antlib declaration. 
Action: Check that the implementing library exists in one of:
        -C:\Users\Simon\eclipse\plugins\org.apache.ant_1.8.2.v20120109-1030\lib
        -C:\Users\Simon\.ant\lib
        -a directory added on the command line with the -lib argument

Примечание:

Красота antlib заключается в том, что вам не нужно выполнять taskdef (необязательно, если вы хотите разместить банку плюща в нестандартном месте)

Как выполнить загрузку сборки

Несмотря на то, что плющ является подпроектом ant, по какой-то необъяснимой причине плющ не упакован с ANT....

Обычно я устанавливаю следующую цель в своих файлах сборки для настройки новой среды:

<target name="bootstrap" description="Used to install the ivy task jar">
    <mkdir dir="${user.home}/.ant/lib"/>
    <get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar"/>
</target>

Он загружает банку плюща из Maven Central.

Так как все остальные ant задачи могут быть впоследствии загружены с помощью плюща, мало кто возражает против этого маленького кусочка уродства в верхней части файла сборки.

Ответ 2

Если вы не можете поместить ivy libs в путь к классам для ant, вам необходимо определить его самостоятельно:

<path id="ivy.lib.path">
    <fileset dir="path/to/dir/with/ivy/jar" includes="*.jar"/>
</path>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
         uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>

Этот бит отсутствует в учебнике по началу работы, но здесь перечислены: http://ant.apache.org/ivy/history/2.2.0/ant.html

Ответ 3

Когда вы запускаете задачу Ant, в пути к классу убедитесь, что существует ivy.jar. В меню eclipse → Run As- > Ant Build → Edit configuration → Classpath. Несмотря на то, что Eclipse будет иметь ivy.jar в Ant Home, по какой-то причине он не вызывается.

Ответ 4

У меня была аналогичная проблема на MacOSX (10.11.6 El Capitan). Я установил ant и Ivy с менеджером пакетов Brew.

Еще один способ - определить его вручную с помощью опции -lib, например:

ant clean compile -lib /usr/local/Cellar/ivy/2.4.0/libexec/ivy-2.4.0.jar 

Ответ 5

Даже после добавления ivy jar в ant lib он не подбирался. Выбор ANT_HOME снова в Preferences->Ant->Runtime приведет к обновлению lib dir, и любые библиотеки, которые вы добавили туда, будут рассмотрены.