Задача Ant с пользовательскими вложенными типами - PullRequest
0 голосов
/ 25 ноября 2018

Я следую документации Apache Ant для " Написание собственной задачи ", но я не могу заставить ее работать с интерфейсом, отличным от Condition:

In CustomTask.java :

public final class CustomTask extends Task {
    public void add(final Type type) {
        log("Got: " + type + " with value: " + type.getValue());
    }

    @Override
    public void execute() {
        log("Executing custom task...");
    }
}

В Тип.java :

public interface Type {
    String getValue();

    void setValue(final String value);
}

В DefaultType.java :

public class DefaultType implements Type {
    private String value;

    @Override
    public String getValue() {
        return value;
    }

    @Override
    public void setValue(final String value) {
        this.value = value;
    }
}

И в build.xml , где я хочу их использовать:

<taskdef name="custom-task" classname="CustomTask" classpathref="run_classpath" />
<typedef name="default-type" classname="DefaultType" classpathref="run_classpath" />

<target name="custom">
    <custom-task>
        <default-type value="Hello world!" />
    </custom-task>
</target>

Но я получаю следующую ошибку:

.../build.xml:37: custom-task doesn't support the nested "default-type" element.

Сумасшедшая вещь здесь, если я заставлю DefaultType реализовать интерфейс org.apache.tools.ant.taskdefs.condition.Condition (как в примере из документации) и добавить к классу CustomTask следующий метод:

public void add(final Condition condition) {
    log("Got: " + condition);
}

Это работает: (!?!?!)

custom:
[custom-task] Got: DefaultType@5a39699c
[custom-task] Executing custom task...

Я не понимаю, что особенного в интерфейсе org.apache.tools.ant.taskdefs.condition.Condition, что он работает только с ним?

Спасибо запомощь.

1 Ответ

0 голосов
/ 25 ноября 2018

Кажется, что проблема исчезнет, ​​если вы добавите свойство loaderref к обоим определениям с одним и тем же значением (кажется, что это может быть что угодно, это не ясно в документации ):

<taskdef
    name="custom-task"
    classname="CustomTask"
    classpathref="run_classpath"
    loaderref="my_loader" />

<typedef
    name="default-type"
    classname="DefaultType"
    classpathref="run_classpath"
    loaderref="my_loader" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...