Apache Ant Java API не выполняет все цели с зависимостями - PullRequest
0 голосов
/ 04 октября 2018

Я создал небольшой скрипт для проверки некоторых функций API Ant Java.К сожалению, документация на этом уровне кажется довольно скудной.

Я ожидаю, что напечатает следующий фрагмент кода:

All Even Odd Done

Но вместо этого он печатает следующее:

Even Odd Done

package com.amazon.tools.desktop;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.helper.DefaultExecutor;

public class AntTest
{
    public static void main(final String... args)
    {
        final Project project = new Project();

        final Target printAll = new Target();
        printAll.setProject(project);
        printAll.setName("printAll");
        project.addTarget(printAll);
        printAll.addTask(new LambdaTask(project, () -> System.out.println("All")));

        final Target printEven = new Target();
        printEven.setProject(project);
        printEven.setName("printEven");
        project.addTarget(printEven);
        printEven.addTask(new LambdaTask(project, () -> System.out.println("Even")));
        printEven.dependsOn("printAll");

        final Target printOdd = new Target();
        printOdd.setProject(project);
        printOdd.setName("printOdd");
        project.addTarget(printOdd);
        printOdd.addTask(new LambdaTask(project, () -> System.out.println("Odd")));
        printOdd.addDependency("printEven");


        final Target finalTarget = new Target();
        finalTarget.setProject(project);
        finalTarget.setName("finalTarget");
        project.addTarget(finalTarget);
        finalTarget.addTask(new LambdaTask(project, () -> System.out.println("Done")));
        finalTarget.addDependency("printEven");
        finalTarget.addDependency("printOdd");

        project.setExecutor(new DefaultExecutor());
        project.executeTarget("finalTarget");
    }

    public static class LambdaTask extends Task
    {
        Runnable task;

        public LambdaTask(final Project project,
                          final Runnable task)
        {
            this.task = task;
            setProject(project);
        }

        @Override
        public void execute()
        {
            task.run();
        }
    }
}

Я могу удалить строку finalTarget.addDependency("printEven");, и цель все равно будет выполняться транзитивно через зависимость, которая есть у цели printOdd, но по какой-то причине printAll никогдавыполняется несмотря на транзитивную зависимость.Я что-то здесь упускаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...