Ant task with custom nested types
I'm following the Apache Ant documentation for "Writing Your Own Task" but I can't get it to work with an interface different than 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...");
}
}
In Type.java:
public interface Type {
String getValue();
void setValue(final String value);
}
In 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;
}
}
And in the build.xml where I want to use them:
<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>
But I get the following error:
.../build.xml:37: custom-task doesn't support the nested "default-type" element.
The crazy thing here is, if I make DefaultType
implement the org.apache.tools.ant.taskdefs.condition.Condition
interface (as in the example from the documentation) and add to the CustomTask
class the following method:
public void add(final Condition condition) {
log("Got: " + condition);
}
It works: (!?!?!)
custom:
[custom-task] Got: DefaultType@5a39699c
[custom-task] Executing custom task...
I don't understand, what is special about the org.apache.tools.ant.taskdefs.condition.Condition
interface that it only works with it?
Thanks for the help.
java ant
add a comment |
I'm following the Apache Ant documentation for "Writing Your Own Task" but I can't get it to work with an interface different than 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...");
}
}
In Type.java:
public interface Type {
String getValue();
void setValue(final String value);
}
In 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;
}
}
And in the build.xml where I want to use them:
<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>
But I get the following error:
.../build.xml:37: custom-task doesn't support the nested "default-type" element.
The crazy thing here is, if I make DefaultType
implement the org.apache.tools.ant.taskdefs.condition.Condition
interface (as in the example from the documentation) and add to the CustomTask
class the following method:
public void add(final Condition condition) {
log("Got: " + condition);
}
It works: (!?!?!)
custom:
[custom-task] Got: DefaultType@5a39699c
[custom-task] Executing custom task...
I don't understand, what is special about the org.apache.tools.ant.taskdefs.condition.Condition
interface that it only works with it?
Thanks for the help.
java ant
As an aside, what's your reason for using Ant?
– chrylis
Nov 25 '18 at 5:58
@chrylis That's what is used at the office
– Vraiment
Nov 25 '18 at 6:02
add a comment |
I'm following the Apache Ant documentation for "Writing Your Own Task" but I can't get it to work with an interface different than 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...");
}
}
In Type.java:
public interface Type {
String getValue();
void setValue(final String value);
}
In 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;
}
}
And in the build.xml where I want to use them:
<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>
But I get the following error:
.../build.xml:37: custom-task doesn't support the nested "default-type" element.
The crazy thing here is, if I make DefaultType
implement the org.apache.tools.ant.taskdefs.condition.Condition
interface (as in the example from the documentation) and add to the CustomTask
class the following method:
public void add(final Condition condition) {
log("Got: " + condition);
}
It works: (!?!?!)
custom:
[custom-task] Got: DefaultType@5a39699c
[custom-task] Executing custom task...
I don't understand, what is special about the org.apache.tools.ant.taskdefs.condition.Condition
interface that it only works with it?
Thanks for the help.
java ant
I'm following the Apache Ant documentation for "Writing Your Own Task" but I can't get it to work with an interface different than 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...");
}
}
In Type.java:
public interface Type {
String getValue();
void setValue(final String value);
}
In 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;
}
}
And in the build.xml where I want to use them:
<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>
But I get the following error:
.../build.xml:37: custom-task doesn't support the nested "default-type" element.
The crazy thing here is, if I make DefaultType
implement the org.apache.tools.ant.taskdefs.condition.Condition
interface (as in the example from the documentation) and add to the CustomTask
class the following method:
public void add(final Condition condition) {
log("Got: " + condition);
}
It works: (!?!?!)
custom:
[custom-task] Got: DefaultType@5a39699c
[custom-task] Executing custom task...
I don't understand, what is special about the org.apache.tools.ant.taskdefs.condition.Condition
interface that it only works with it?
Thanks for the help.
java ant
java ant
asked Nov 25 '18 at 5:53
VraimentVraiment
255
255
As an aside, what's your reason for using Ant?
– chrylis
Nov 25 '18 at 5:58
@chrylis That's what is used at the office
– Vraiment
Nov 25 '18 at 6:02
add a comment |
As an aside, what's your reason for using Ant?
– chrylis
Nov 25 '18 at 5:58
@chrylis That's what is used at the office
– Vraiment
Nov 25 '18 at 6:02
As an aside, what's your reason for using Ant?
– chrylis
Nov 25 '18 at 5:58
As an aside, what's your reason for using Ant?
– chrylis
Nov 25 '18 at 5:58
@chrylis That's what is used at the office
– Vraiment
Nov 25 '18 at 6:02
@chrylis That's what is used at the office
– Vraiment
Nov 25 '18 at 6:02
add a comment |
1 Answer
1
active
oldest
votes
It seems the issue goes away if you add the loaderref
property to both definitions with the same value (it seems it can be anything, this is not clear in the documentation):
<taskdef
name="custom-task"
classname="CustomTask"
classpathref="run_classpath"
loaderref="my_loader" />
<typedef
name="default-type"
classname="DefaultType"
classpathref="run_classpath"
loaderref="my_loader" />
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53465025%2fant-task-with-custom-nested-types%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
It seems the issue goes away if you add the loaderref
property to both definitions with the same value (it seems it can be anything, this is not clear in the documentation):
<taskdef
name="custom-task"
classname="CustomTask"
classpathref="run_classpath"
loaderref="my_loader" />
<typedef
name="default-type"
classname="DefaultType"
classpathref="run_classpath"
loaderref="my_loader" />
add a comment |
It seems the issue goes away if you add the loaderref
property to both definitions with the same value (it seems it can be anything, this is not clear in the documentation):
<taskdef
name="custom-task"
classname="CustomTask"
classpathref="run_classpath"
loaderref="my_loader" />
<typedef
name="default-type"
classname="DefaultType"
classpathref="run_classpath"
loaderref="my_loader" />
add a comment |
It seems the issue goes away if you add the loaderref
property to both definitions with the same value (it seems it can be anything, this is not clear in the documentation):
<taskdef
name="custom-task"
classname="CustomTask"
classpathref="run_classpath"
loaderref="my_loader" />
<typedef
name="default-type"
classname="DefaultType"
classpathref="run_classpath"
loaderref="my_loader" />
It seems the issue goes away if you add the loaderref
property to both definitions with the same value (it seems it can be anything, this is not clear in the documentation):
<taskdef
name="custom-task"
classname="CustomTask"
classpathref="run_classpath"
loaderref="my_loader" />
<typedef
name="default-type"
classname="DefaultType"
classpathref="run_classpath"
loaderref="my_loader" />
answered Nov 25 '18 at 8:31
VraimentVraiment
255
255
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53465025%2fant-task-with-custom-nested-types%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
As an aside, what's your reason for using Ant?
– chrylis
Nov 25 '18 at 5:58
@chrylis That's what is used at the office
– Vraiment
Nov 25 '18 at 6:02