web-dev-qa-db-ja.com

Ivyは依存関係の解決に失敗し、原因を見つけることができません

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="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>
31
Simon Sheehan

ANTはツタの瓶を見つけることができません。 ダウンロード済み を抽出し、ivy-x.y.z.jarを次のいずれかの場所に配置する必要があります。

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

ツタを有効にする

Ivyは antlib としてパッケージ化されているため、有効にするには以下を実行する必要があります

1)ビルドファイルの先頭でivy名前空間を宣言します

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

2)antライブラリディレクトリの1つにivy jarを含めます

エラーメッセージは、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を実行する必要がないことです(ivy jarを非標準の場所に配置する場合はオプションです)

方法bootstrapビルド

IvyはANTサブプロジェクトですが、不可解な理由により、ivyは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からivy jarをダウンロードします。

他のすべてのANTタスクはその後ivyを使用してダウンロードできるため、ビルドファイルの上部にあるこのlittleい部分に反対する人はほとんどいません。

52
Mark O'Connor

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

11
oers

Antタスクを実行するとき、クラスパスにivy.jarがあることを確認します。 Eclipseで、[Run As]、[Ant Build]、[Edit configuration]、[Classpath]タブの順にクリックします。 EclipseのANTホームにはivy.jarがありますが、何らかの理由で呼び出されません。

4
Smart Coder

ivy jarant libを追加した後でも、ピックアップされていませんでした。 ANT_HOMEPreferences->Ant->Runtimeを再度選択すると、lib dirが更新され、そこに追加したライブラリが使用されます。

0
manojmo

MacOSX(10.11.6 El Capitan)でも同様の問題がありました。 antIvyBrewパッケージマネージャーと共にインストールしました。

もう1つの方法は、-libオプションを使用して手動で定義することです。例:

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