Java 如何定义使用连字符命名的任务?
build.xmlJava 如何定义使用连字符命名的任务?,java,ant,Java,Ant,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"> <mon
<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" />
...
执行
Buildfile: ...\build.xml
compile-sample:
run-client:
BUILD FAILED
...\build.xml:116: monitor-client doesn't support the nested "log-server" element.
问题
Buildfile: ...\build.xml
compile-sample:
run-client:
BUILD FAILED
...\build.xml:116: monitor-client doesn't support the nested "log-server" element.
我搜索元素和属性的适用命名规则以及到Java语言的映射规则。是一个进行内省以从setter方法中提取属性的类
从构造函数的Javadocs中:
void setFoo(Bar)
被认为是设置属性foo
值的方法,只要Bar
是非void且不是数组类型。非字符串参数类型总是重载字符串参数类型,但这是在优先级方面唯一的保证
基于答案,多谢他
Apache ANT使用两种方法来标识元素和属性:
org.apache.tools.ant.DynamicElement
和org.apache.tools.ant.AttributeElement
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() {
}
}
谢谢我已经检查了getPropertyName()方法:
methodName.substring(prefix.length()).toLowerCase(Locale.ENGLISH)
。我知道问题不在于方法名,而在于到XML的映射。因为连字符不能出现在Java标识符中,所以不能在XML中使用。我发现了这个,我认为它符合您的要求: