我怎样才能使用依赖于ivy导入的lib的Ant taskdef

我在build.xml中创建了一个taskdef,它依赖于一个驻留在Ivy导入的jar中的类。

我想知道是否有可能以任何方式,因为我的构建在启动之前中断,因为它无法找到taskdef的类。

这似乎是一个鸡蛋和鸡肉问题,因为我不能得到这个类,因为我必须首先解决我的依赖关系(这需要构建工作)。

对的,这是可能的。 但是,这意味着您必须在执行任务之前解析并检索jar。 有两种方法可以做到这一点:

  • 任务之前放置 任务。 这三个都可以在 。 但是,在这种情况下,如果你运行一个干净的 ,这三个任务将在clean之前首先执行,这意味着简单的clean需要更长的时间,并且你必须确保你不clean期间完成的任何事情。

  • 将所有三个放在他们自己的目标中,然后使依赖于第三方jar的目标依赖于检索常春藤jar的目标并定义任务。 这可能很难用于几乎所有任务都可以使用的Ant-Contrib任务,但是在构建过程的最后使用的某些包装任务应该更容易。

以下是使用常春藤检索常规任务依赖关系的示例。 正如大卫所说,诀窍是在常春藤解决了依赖关系并创建路径引用之后调用taskdef:

  • 苛刻的Jarring与常春藤

以下是更正常的示例构建

  • 使用Ant将JaCoCo集成到声纳中

我创建配置以匹配我需要的构建类路径。 特别注意“构建”配置的映射。 这就是与ANT任务相关的jar子可以与用于编译的jar子分开的方式。

引导常春藤

对你的鸡肉和鸡蛋的反应评论。

我使用常春藤来管理所有构建依赖项。 以下目标确保在我的构建计算机上安装ivy。

       

只记录我的解决方案,以防它可以帮助任何人。 干净利落地完成大卫的回答可能是正确的方法,但万一你需要快速解决方案……

1)将您的taskdef移动到要调用的宏中,而不是在外部定义它。 这将避免它被评估和立即破坏构建。

2)将依赖项解析添加为包含对宏的调用的任务的依赖项。