2012-03-24 12 views
27

Mentre utilizza ivy:retrieve, non riesce a risolvere la dipendenza che dovrebbe essere scaricata. L'output è simile al seguente:Ivy non riesce a risolvere una dipendenza, impossibile trovare la causa

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 sezione dedicata del build.xml assomiglia così:

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

Anche qui è un elenco di quello che dovrebbe essere il download (dal 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> 

risposta

46

ANT non riesce a trovare il vaso edera. Ha bisogno di essere downloaded, estratto, e l'edera-xyzjar collocato in una delle seguenti posizioni:

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

Abilitazione edera

Ivy è confezionato come un antlib, in modo da consentire che è necessario eseguire le seguenti operazioni

1) dichiarare l'edera n amespace nella parte superiore del file di build

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

2) Calcola il vaso edera in una delle directory di libreria formica

Il tuo messaggio di errore indictates alcuni dei possibili riprese per 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 

Nota:

La bellezza di un antlib è che non c'è bisogno di per formare il taskdef (E 'facoltativo se si desidera posizionare il vaso edera in una posizione non standard)

Come creare un semplice accumulo

Anche se l'edera è un ANT sotto-progetto, per qualche ragione inspiegabile edera è non confezionato con ANT ....

io di solito sono i seguenti bersaglio nei miei file di generazione di impostare un nuovo ambiente:

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

Si scarica il vaso di edera da Maven centrale.

Poiché tutte le altre attività ANT possono essere successivamente scaricate utilizzando edera, poche persone si oppongono a questo piccolo pezzo di bruttezza nella parte superiore del file di costruzione.

+0

Molto ben dettagliato. –

+0

domanda di feedback rapido: se ivy è nella tua ant_home/lib non hai bisogno di taskdef? questo era completamente nuovo per me: D – oers

+3

Sì. È sconcertante il motivo per cui il progetto ANT non spedisce il vaso dell'edera per impostazione predefinita. –

11

Se non è possibile inserire le librerie ivy nel classpath per ant, è necessario definirlo manualmente:

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

Questo bit non è presente nella guida introduttiva tutorial, ma elencati qui: http://ant.apache.org/ivy/history/2.2.0/ant.html

+0

Fa differenza se sto costruendo all'interno di Eclipse, che sembra avere tutte le cose della formica? –

+0

@SimonSheehan ivy non è una parte della formica è una libreria aggiuntiva, quindi non fa alcuna differenza quando si utilizza eclipse, è necessario definire l'attività (prima dell'uso, naturalmente). – oers

+0

nel build.xml non sono del tutto sicuro di dove sto mettendo questo. Solo da qualche parte? –

4

Quando si esegue l'attività Ant, nel classpath assicurarsi che ivy.jar sia presente. In Eclipse -> Esegui come -> Ant Build -> Modifica configurazione -> scheda Classpath. Anche se Eclipse avrebbe l'ivy.jar nella ANT Home, per qualche motivo non viene chiamato.

0

Ho avuto un problema simile su MacOSX (10.11.6 El Capitan). Ho installato ant e Ivy con il Brew manager.

Un altro modo è quello di definire manualmente utilizzando l'opzione -LIB, es .:

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

Anche dopo aver aggiunto ivy jar al ant lib, non era stato raccolto. Selezionando di nuovo ilin Preferences->Ant->Runtime, si aggiornerà lo lib dir e tutte le librerie che sono state aggiunte verranno riprese.

Problemi correlati