Ant 目标失败:Antlib 或 Ivy 问题? [复制]

Posted

技术标签:

【中文标题】Ant 目标失败:Antlib 或 Ivy 问题? [复制]【英文标题】:Ant target failing: Antlib or Ivy issue? [duplicate] 【发布时间】:2012-09-22 13:41:09 【问题描述】:

可能重复:Ivy fails to resolve a dependancy, unable to find cause

我正在尝试运行以下构建任务 (initIvy):

<?xml version="1.0" encoding="UTF-8"?>
<project name="myproject-build" default="package" basedir=".." xmlns:ivy="antlib:org.apache.ivy.ant">
    <property file="build/build.properties"/>
    <property environment="env"/>

    <!-- Ant library path, including all of its plugins. -->
    <path id="ant.lib.path">
        <fileset dir="$env.ANT_HOME/lib" includes="*.jar"/>
    </path>

    <!-- CONFIGURE IVY -->
        <taskdef resource="org/apache/ivy/ant/antlib.xml"
            uri="antlib:org.apache.ivy.ant" classpathref="ant.lib.path"/>

    <!-- Use Ivy tasks to resolve dependencies into the local Ivy cache. -->
    <target name="initIvy">
        <!-- Initialize Ivy and connect to host repository. -->
        <echo message="Initializing Apache Ivy and connecting to the host repository."/>
        <ivy:settings url="$ivy.std.repo.settings.url" realm="$ivy.std.repo.realm" username="$ivy.std.repo.username" passwd="$ivy.std.repo.password"/>

        <!-- Clear/flush the Ivy cache. -->
        <echo message="Cleaning the local Ivy cache for the current build."/>
        <ivy:cleancache/>
    </target>

    <!-- Rest of buildfile omitted for brevity. -->

</project>

当我运行 ant -buildfile build.xml initIvy 时,我得到以下输出:

Buildfile: /<path-to-my-project>/build/build.xml
    [taskdef] Could not load definitions from resource org/apache/ivy/ant/antlib.xml. It could not be found.

initIvy:
    [echo] Initializing Apache Ivy and connecting to the host repository.

BUILD FAILED
/<path-to-my-project>/build/build.xml:81: 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:
    -/<path-to-my-ANT_HOME>/lib
    -/home/myUser/.ant/lib
    -a directory added on the command line with the -lib argument

当我转到 $ANT_HOME/lib 时,我看不到任何标有“antlib*.jar”的 JAR。

所以我猜测我下载了一个不包含 Antlib 的 Ant 版本,而现在我使用的是 Ivy(它使用 Antlib),构建过程令人窒息?

如果这是一个 Antlib 问题,那么我相信我想要一个可用的发行版here。如果是这样,有人可以确认我应该使用哪一个(仅包含 Antlib 而没有其他任何内容),并确认安装它的过程;即,是否就像将正确的 JAR 放入 $ANT_HOME/lib 一样简单?等等。

如果这是 Ivy 的问题,那么有人可以指出正确的方向吗?

如果这既不是 Antlib 也不是 Ivy,同上上面的问题。提前致谢!

【问题讨论】:

【参考方案1】:

我认为您可能缺少 Apache IVY 库。从这里下载 - apache ivy 将 jar 复制到你的 ant lib 目录中。

例如(根据需要更改版本号):

    下载并安装 Ant(例如,C:\Apps\Tools\apache-ant-1.9.7)。 下载并提取 Ivy(例如,C:\Users\UserName\Downloads\apache-ivy-2.4.0) 将C:\Users\UserName\Downloads\apache-ivy-2.4.0\ivy-2.4.0.jar复制到C:\Apps\Tools\apache-ant-1.9.7\lib

Ant 被配置为使用 Ivy。

【讨论】:

当——就是这样。我刚刚复制了 Ivy lib JAR,忘记复制 Ivy JAR。只是出于好奇,是什么给了你这个(正确的)想法?只是想学习,以便下次我可以自己诊断问题!再次感谢! @4herpsand7derpsago antlib 是 ant 中的通用术语,而不是单独的工具。如果你得到“Could not load definitions from resource org/apache/ivy/ant/antlib.xml. It could not be found”那么这意味着类路径中没有jar文件,其中包含和“org/ apache/ivy/ant/antlib.xml"。因为这个文件是 ivy.xml 的一部分,所以你知道这个 lib 丢失了。 更方便的方法是使用Ivy Eclipse Update Site - 同时安装“Apache Ivy”-Libs(Apache Ivy 和 Apache Ivy Ant Taks) "your ant lib directory" 是 "ANT_HOME/lib 和一个用户特定的目录,$user.home/.ant/lib。" ) 我在ubuntu 18中遇到了同样的问题 --Install ant $sudo apt update $sudo apt install ant --从ant.apache.org/ivy/download.cgi下载常春藤我用的是git方法 $git clone git-wip-us.apache.org/repos/asf/ant-ivy.git $ ant jar 你可以在 --ant-ivy/build/artifact/jars 找到 ivy.jar 做 $cd /usr/share/ant/lib $sudo ln -s path_to_ivy_jar 你很好

以上是关于Ant 目标失败:Antlib 或 Ivy 问题? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Ant Ivy conf 特定检索在我发布的 jar 上失败

Maven 或 Ivy 用于管理 Ant 的依赖关系?

有没有办法可以使用Maven存储库为Ant添加依赖项?

IvyDE 如何与命令行 Ant 和 Ivy 共存?

在旧的 Ant 项目中添加 Ivy

Ant/ivy 脚本有助于删除具有阈值的旧工件