蚂蚁未能找到常春藤罐子,尽管罐子在~/.ant/lib中



我有以下build.xml来演示问题:

<project
    xmlns:ivy="antlib:org.apache.ivy.ant"
    name="test" default="test-ivy">
     <target name="test-ivy">
        <ivy:settings />
     </target>
</project>

使用 Ant (1.7.1) 调用它时,我得到:

$ ant
Buildfile: build.xml
test-ivy:
BUILD FAILED
/home/voops/test/build.xml:7: Problem: failed to create task or type antlib:org.apache.ivy.ant:settings
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/voops/.ant/lib
        -a directory added on the command line with the -lib argument

Total time: 0 seconds

但是,常春藤罐子确实存在于我的~/.ant/lib目录中:

$ whoami
voops
$ls /home/voops/.ant/lib/ivy-2.3.0.jar
-rw-rw-r-- 1 voops voops 1222059 Nov 11 14:55 /home/voops/.ant/lib/ivy-2.3.0.jar

看来我必须通过添加以下元素来手动指示常春藤罐子的位置:

<taskdef uri="antlib:org.apache.ivy.ant" resource="org/apache/ivy/ant/antlib.xml"  classpath="${user.home}/.ant/lib/ivy-2.3.0.jar"/> 

。在我的build.xml文件中。添加此元素后,生成成功。

为什么即使常春藤罐位于默认的~/.ant/lib位置,并且必须明确告知在所述位置寻找常春藤,蚂蚁也无法找到常春藤?

更新:似乎上述元素仅适用于 Ant 1.7.1。对于 Ant 1.8.2 或 Ant 1.9.4,我不必添加它。

这是

由于构建文件中的XML命名空间声明:

xmlns:ivy="antlib:org.apache.ivy.ant"

由于正在使用前缀 ivy:,因此taskdef任务中需要 uri 属性以允许使用前缀调用任务:

typedef文档中显示了一个示例:

uri:自 Ant 1.6 以来此定义应位于其中的 uri

编辑:

antlib指示如果将 antlib 放置在 Ant 的主目录中,则缺省情况下 Ant 可以装入正确的资源:

当 Ant 遇到具有此模式的命名空间 URI 的元素时,它将检查缺省类路径的包目录中是否存在名为 antlib.xml 的资源。

相关内容

  • 没有找到相关文章

最新更新