代码之家  ›  专栏  ›  技术社区  ›  digiarnie

从自定义任务中调用Ant目标会导致“创建任务或类型导入失败”错误

  •  0
  • digiarnie  · 技术社区  · 15 年前

    posts 调用另一个xml文件中的现有目标。

    在调用我想要的构建xml方面,它似乎做了我想要做的事情,但是,它现在抛出了一个非常奇怪的错误:

    build.xml:4: Problem: failed to create task or type import
    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.
        at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:508)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:369)
        at org.hardhat.task.HardHatTask.executeHardHat(HardHatTask.java:47)
        at org.hardhat.task.HardHatTask.execute(HardHatTask.java:23)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    

    自定义Ant任务调用的构建xml如下所示:

    <project name="myproject" default="all" basedir=".">
        <import file="includes.xml"/>
    
        <target name="all" depends="doStuff" />
    </project>
    

    错误表明问题与第4行和任务“import”有关。关于为什么Ant似乎不理解自己的任务,有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   digiarnie    15 年前

    有趣的是,它不起作用的原因似乎是因为我的自定义Ant任务如下所示:

    public void execute() {
        Ant ant = new Ant();
        Project project = new Project();
        project.setProperty("...", ...);
        ant.setProject(project);
        File directory = new File("...");
        ant.setDir(directory);
        ant.setAntfile("build.xml");
        ant.setTarget("all");
        ant.execute();
    }
    

    我所要做的就是调用getProject()而不是new Project(),问题就消失了:

    public void execute() {
        Ant ant = new Ant();
        Project project = getProject();
        project.setProperty("...", ...);
        ant.setProject(project);
        File directory = new File("...");
        ant.setDir(directory);
        ant.setAntfile("build.xml");
        ant.setTarget("all");
        ant.execute();
    }
    
    推荐文章