我正在尝试安装 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 任务,因此很少有人反对构建文件顶部的这一小段丑陋内容。