【问题标题】:How can I run an ant task as a prerequisite to <taskdef>?我怎样才能运行一个 ant 任务作为 <taskdef> 的先决条件?
【发布时间】:2015-10-05 00:18:02
【问题描述】:

我使用指令 here 创建了自己的 ant 任务。在我的 ant 脚本中,我像这样创建 &lt;taskdef&gt;

<!-- 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 中进行一些设置。 &lt;taskdef&gt; 不喜欢 ifunlessdepends。如何确保在完成&lt;taskdef&gt; 之前调用我的设置任务?

【问题讨论】:

    标签: java ant taskdef


    【解决方案1】:

    一种方法是将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" />
    
    ...
    

    【讨论】:

    • 这是我目前的解决方法,我很高兴看到我在正确的轨道上。我计划将 myUploader.xml 与产品一起分发,并且我试图使设置尽可能简单(除了导入之外没有依赖项)。我希望只有一个导入,然后我们可以调用该任务。但这是我现在的亚军选择。
    • 如果需要设置部分,为什么不简单地将其从目标中删除并将其放在taskdef之前,即将设置放在任何目标之外,以便在导入myUploader.xml时运行。
    • 在 ant 方面我还是个新手,我不知道我能做到这一点。这正是我所需要的,谢谢!如果你想更新你的答案,我会接受。
    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2021-06-04
    • 2020-10-22
    • 2015-02-23
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多