我怎样才能 运行 一个 ant 任务作为 <taskdef> 的先决条件?

How can I run an ant task as a prerequisite to <taskdef>?

我使用指令 here 创建了自己的 ant 任务。在我的 ant 脚本中,我这样创建 <taskdef>

<!-- myUploader.xml -->
<taskdef name="fileUpload" classname="com.awt.client.UploaderTask" classpath="lib/fileUploader.jar" />

<target name="setup" description="some required setup before taskdef!">
    <!-- checking for required jars, etc... -->
</target>

然后我可以将调用它的脚本作为 ant 任务导入:

<!-- build.xml -->
<import file="myUploader.xml" />
<fileUpload server="${server}" username="${username}" password="${password}" appname="TestApp" appversion="13" />

一切正常。现在,在 taskdef 发生之前,我希望在 myUploader.xml 中进行一些设置。 <taskdef> 不喜欢 ifunlessdepends。如何确保在 <taskdef> 完成之前调用我的设置任务?

一种方法是将 taskdef 移动到 setup 目标内:

<target name="setup" description="some required setup before taskdef!">
    <!-- checking for required jars, etc... -->
    <taskdef name="fileUpload" classname="com.awt.client.UploaderTask" classpath="lib/fileUploader.jar" />
</target>

然后在主构建文件中,导入 myUploader.xml 后,调用现在负责定义自定义任务的 setup 目标。

或者您可以将 setup 目标的部分移到外部(成为顶级部分):

<project>

     <!-- do required setup here -->
   <taskdef name="fileUpload" classname="com.awt.client.UploaderTask" classpath="lib/fileUploader.jar" />

...