Я создал небольшой скрипт для проверки некоторых функций 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 никогдавыполняется несмотря на транзитивную зависимость.Я что-то здесь упускаю?