web-dev-qa-db-fra.com

Ivy n'arrive pas à résoudre une dépendance, incapable de trouver la cause

Lors de l'utilisation de ivy:retrieve, la résolution de la dépendance à télécharger ne peut pas être résolue. La sortie ressemble à ceci:

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

La section correspondante du build.xml ressemble à ceci:

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

Voici également une liste de ce qu'il devrait télécharger (à partir du 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>
30
Simon Sheehan

ANT ne peut pas trouver le pot de lierre. Doit être téléchargé , extrait et le fichier ivy-x.y.z.jar placé dans l'un des emplacements suivants:

  • $ ANT_HOME/lib
  • $ HOME/.ant/lib

Activer le lierre

Ivy est présenté sous la forme d'un antlib , vous devez donc procéder comme suit:

1) Déclarer l'espace de noms ivy en haut du fichier de construction

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

2) Inclure le bocal en lierre dans l’un des répertoires de la bibliothèque de fourmis 

Votre message d'erreur indique certains des emplacements possibles pour 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

Remarque:

La beauté d'un antlib réside dans le fait que vous n'avez pas besoin d'exécuter la taskdef (facultatif si vous souhaitez placer le bocal en lierre dans un emplacement non standard).

Comment amorcer une construction

Même si le lierre est un sous-projet ANT, pour des raisons inexplicables, le lierre n’est pas fourni avec ANT ....

J'inclus normalement la cible suivante dans mes fichiers de construction pour configurer un nouvel environnement: 

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

Il télécharge le pot de lierre de Maven Central.

Etant donné que toutes les autres tâches ANT peuvent ensuite être téléchargées à l'aide de ivy, peu de personnes s'opposent à ce petit morceau de laideur situé en haut du fichier de construction.

49
Mark O'Connor

Si vous ne pouvez pas mettre les bibliothèques ivy dans le classpath pour ant, vous devrez le définir vous-même:

<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"/>

Ce bit manque dans le didacticiel de démarrage, mais est répertorié ici: http://ant.Apache.org/ivy/history/2.2.0/ant.html

11
oers

Lorsque vous exécutez une tâche Ant, dans le chemin d'accès aux classes, vérifiez que le fichier ivy.jar est présent. Dans l'onglet Eclipse -> Exécuter en tant que> Ant Build -> Modifier la configuration -> Classpath. Même si Eclipse aurait le fichier ivy.jar dans ANT Home, il n’appelle pas pour une raison quelconque.

4
Smart Coder

Même après avoir ajouté ivy jar au ant lib, il n'a pas été ramassé. Si vous sélectionnez à nouveau ANT_HOME dans Preferences->Ant->Runtime, le lib dir sera actualisé et toutes les bibliothèques que vous y aurez ajoutées seront utilisées.

0
manojmo

J'ai eu un problème similaire sur MacOSX (10.11.6 El Capitan). J'ai installé ant et Ivy avec le gestionnaire de paquets Brew.

Un autre moyen consiste à le définir manuellement à l’aide de l’option -lib, par exemple:

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