你可以在ant Task.init()方法中做什么?

ski*_*ppy 5 java ant

我正在开发一些所有需要初始化相同对象的自定义ant任务.我想在init()方法中从Task扩展的公共超类中初始化这些对象.但是我从ant任务的生命周期中看到,在设置任务子元素和属性之前调用init().因此,如果我正确读取,初始化这些对象所需的所有数据在init()期间都不可用.

那么,为什么在这一点调用init()?你甚至知道你可以在init()中使用什么?它可以用于什么?

(还有一些其他方法可以依赖于在execute()之前调用,但在我的数据可用之后?)

ska*_*man 3

最好的指南是查看 Ant 附带的任务的源代码。似乎有 3 个主要用例init()

  1. 委托对象的预初始化。例如,Sync任务将其大部分工作委托给底层对象,并将部分工作传递setXYZ()给该委托。该委托的实例化和预配置必须在任务上设置任何属性之前进行。
  2. 属性值的默认配置,基于常规项目设置。例如,任务通过查看系统属性来SSH初始化其默认值。knownHosts此外,该Project对象已通过init()调用注入到任务中,因此任务可以查看该对象。
  3. 将可选的第 3 方依赖项添加到类路径中。例如,JUnit 任务添加了各种与 Junit 相关的依赖项。这些只能在使用任务时加载,因为它们是可选的。

可以想象,上述所有操作都可以在任务构造函数内完成,但是使用显式init()方法的使用符合 Ant 任务设计。

execute()至于问题的第二部分,不,在设置和调用属性之间没有调用生命周期挂钩。你必须在其内部做到这一点execute()