启用 Ivy

启用 Ivy

我正在尝试安装 Apache Ivy,但无法让 ant 识别它。

Apache Ivy 安装说明,我从osuosl.org Ivy 档案,解压它,并将 .jar 文件复制到 ant 应该能够看到它的位置。但是,我尝试的任何依赖 ivy 的构建都会失败,如下所示:

$ ant
Buildfile: /home/ec2-user/ivy/apache-ivy-2.3.0/build.xml

init-ivy:
  [taskdef] Could not load definitions from resource org/apache/ivy/ant/antlib.xml. It could not be found.

retrieve-all:

BUILD FAILED
/home/ec2-user/ivy/apache-ivy-2.3.0/build.xml:55: 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:
        -/usr/share/ant/lib
        -/home/ec2-user/.ant/lib
        -a directory added on the command line with the -lib argument

我四处寻找,我查看的每个页面似乎都同意我只需要“安装 Ivy jar 文件”,但这似乎没有帮助。我试过:

  • 将 ivy-2.3.0.jar 复制到 /usr/share/ant/lib 和/或 ~/.ant/lib
  • 相同,但将其重命名为 ivy.jar
  • 添加-lib /path/to/ivy-2.3.0.jar到 ant 命令
  • 所有这些都在 ivy 目录或 src/example/hello-ivy 目录中

有趣的是,在 src/example/go-ivy 目录中,执行ant成功;但这并没有帮助其他基于 ivy 的构建运行。

我肯定忽略了一些非常明显的东西,但我看不出是什么。有什么想法吗?

(这是关于“Amazon Linux AMI 版本 2013.09”)

答案1

我最终在 Ivy 用户列表上问了同样的问题,并得到了答复:http://mail-archives.apache.org/mod_mbox/ant-ivy-user/201402.mbox/%3C52FCAF1B.40903%40reast.net%3E事实证明,我只需要在调用 ant 之前执行以下命令:

export ANT_HOME=/usr/share/ant/

看起来,虽然 ant 建议将文件放在 /usr/share/ant/lib 中,但除非您设置 ANT_HOME,否则它实际上不会在那里查找。

答案2

我曾经在 Stackoverflow 上回答过这个问题:

ivy 无法解决依赖关系,无法找到原因。我将其内嵌于下面:


ANT 找不到 ivy jar。需要将其放入以下位置之一:

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

启用 Ivy

Ivy 被包装为蚂蚁库,因此要启用它,您需要执行以下操作

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

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

2)将 ivy jar 包含在其中一个 ant 库目录中

您的错误消息指出了 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(如果您想将 ivy jar 放在非标准位置,这是可选的)

如何引导构建

尽管 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。

由于随后可以使用 ivy 下载所有其他 ANT 任务,因此很少有人反对构建文件顶部的这一小段丑陋内容。

相关内容