常春藤无法解决依赖,无法找到原因

时间:2012-03-24 17:27:36

标签: eclipse ant 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>

5 个答案:

答案 0 :(得分:51)

ANT找不到常春藤罐子。需要downloaded,提取,并将ivy-x.y.z.jar放入以下位置之一:

  • $ ANT_HOME / lib中
  • $ HOME /赵军阳张志利/ lib中

启用常春藤

Ivy打包为antlib,因此要启用它,您需要执行以下操作

1) 在构建文件的顶部声明ivy命名空间

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

2) 在其中一个ant库目录中包含常春藤jar

您的错误消息指示了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任务,因此很少有人会在构建文件的顶部反对这个小小的丑陋。

答案 1 :(得分:11)

如果您不能将常春藤库放在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

答案 2 :(得分:4)

运行Ant任务时,在类路径中确保ivy.jar存在。在日食 - &gt;运行As-&gt; Ant Build - &gt;编辑配置 - &gt; Classpath选项卡。即使Eclipse在ANT Home中有ivy.jar,但由于某些原因它没有被调用。

答案 3 :(得分:0)

我在MacOSX上遇到了类似的问题(10.11.6 El Capitan)。我使用 Brew 包管理器安装了 ant Ivy

另一种方法是使用-lib选项手动定义它,例如:

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

答案 4 :(得分:0)

即使将eventRender: function(event, element, view) { if (event.customRender == true) { var el = element.html(); element.html("<div style='width:90%;float:left;'>" + el + "</div><div style='text-align:right;' class='close'><span class='glyphicon glyphicon-trash'></span></div>"); //...etc } } 添加到ivy jar,也没有被提取。在ant lib中再次选择ANT_HOME将导致Preferences->Ant->Runtime被刷新,并且您在此处添加的所有库都将被删除。