2012-03-24 3 views
27

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

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="http://download.oracle.com/javase/6/docs/api/" /> 
     <link href="http://docs.jboss.org/netty/3.2/api/" /> 
     <link href="http://guava-libraries.googlecode.com/svn/trunk/javadoc/" /> 
     <link href="http://www.junit.org/apidocs/" /> 
     <link href="http://commons.apache.org/compress/apidocs/" /> 
     <link href="http://jruby.org/apidocs/" /> 
    </javadoc> 
    </target> 

ответ

46

ANT не может найти плющ банки. Должно быть downloaded, экстрагируют, и плющ-xyzjar помещается в одно из следующих мест:

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

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

Ivy упакована как antlib, так, чтобы она вам нужно сделать следующее

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

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

2) Включите плющ банку в одном из муравьиных каталогов библиотек

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

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 могут быть впоследствии загружены с помощью плюща, мало кто возражает против этого маленького кусочка уродства в верхней части файла сборки.

+0

Очень хорошо подробно. –

+0

вопрос с быстрой обратной связью: если плющ в вашем ant_home/lib вам не нужен taskdef? что было совершенно новым для меня: D – oers

+3

Да. Непонятно, почему проект ANT не отправляет банку плюща по умолчанию. –

11

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

<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

+0

Разве это имеет значение, если im строить внутри затмения, которое, кажется, имеет все муравьиные вещи? –

+0

@SimonSheehan ivy на самом деле не является частью муравья, это дополнительная библиотека, поэтому при использовании затмения вам не нужно различать какую-либо разницу, вам нужно определить задачу (до использования, конечно). – oers

+0

в build.xml im не совсем уверен, где я это помещаю. Где угодно? –

4

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

0

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

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

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

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

Смежные вопросы