的build.xml
<taskdef
onerror ="ignore"
name ="monitor-client"
classpath="${jar-client}"
classname="hpms.app.mon.client.AntTask" />
<target name="run-client" depends="compile-sample" description="Launch monitor">
<monitor-client
layout ="Layout.xml"
gui ="true"
autostart ="true">
<log-server
port ="3000"
capacity="2048" />
...
AntTask.java
public final class AntTask extends Task {
private ...
public void setLayout( String layout ) {
}
public void setGui( boolean gui ) {
}
public void setAutostart( boolean autostart ) {
}
public void addConfiguredLogServer( LogServer logServer ) {
}
@Override
public void execute() {
...
}
}
执行
Buildfile: ...\build.xml
compile-sample:
run-client:
BUILD FAILED
...\build.xml:116: monitor-client doesn't support the nested "log-server" element.
问题
我搜索适用的元素和属性命名规则,并将映射规则搜索到Java语言。
答案 0 :(得分:1)
org.apache.tools.ant.IntrospectionHelper
是用于从setter方法中提取属性的内省类。
从构造函数的Javadocs:
void setFoo(Bar)
被认为是设置属性foo
的值的方法,只要Bar
为非void且不是数组类型即可。非String参数类型总是重载String参数类型,但这是在优先级方面做出的唯一保证。
答案 1 :(得分:1)
Apache ANT使用两种方法来识别元素和属性:
org.apache.tools.ant.DynamicElement
和org.apache.tools.ant.AttributeElement
当使用特殊字符时,必须使用接口将XML标识符映射到Java标识符,如连字符,如下所示:
import org.apache.tools.ant.DynamicElement;
import org.apache.tools.ant.Task;
public final class AntTask extends Task implements DynamicElement {
private ...
public void setLayout( String layout ) {
}
public void setGui( boolean gui ) {
}
@Override
public Object createDynamicElement( String name ) {
if( name.equals( "log-server" )) {
return new Logserver();
}
return null;
}
...
@Override
public void execute() {
}
}