如何定义以连字符命名的任务?

Aub*_*bin 5 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">
   <monitor-client
      layout      ="Layout.xml"
      gui         ="true"
      autostart   ="true">
      <log-server
         port    ="3000"
         capacity="2048" />
...
Run Code Online (Sandbox Code Playgroud)

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() {
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

执行

Buildfile: ...\build.xml
compile-sample:
run-client:

BUILD FAILED
...\build.xml:116: monitor-client doesn't support the nested "log-server" element.
Run Code Online (Sandbox Code Playgroud)

我搜索适用的元素和属性命名规则以及映射规则到Java语言.

Aub*_*bin 1

根据马特 评论回答,非常感谢他!

Apache ANT 使用两种方式来识别元素和属性:

  1. 基于 Java 名称的反射,在 xml 中映射,忽略大小写,如manouti 答案中的解释。
  2. 基于接口。org.apache.tools.ant.DynamicElementorg.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() {
   }
}
Run Code Online (Sandbox Code Playgroud)