首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义以连字符命名的任务?

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

Stack Overflow用户
提问于 2014-11-10 09:08:54
回答 2查看 433关注 0票数 5

build.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
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() {
      ...
   }
}

执行

代码语言:javascript
复制
Buildfile: ...\build.xml
compile-sample:
run-client:

BUILD FAILED
...\build.xml:116: monitor-client doesn't support the nested "log-server" element.

问题

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-10 15:41:37

答案基于哑光 评论,非常感谢他!

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

  1. 基于Java名称的反射,在马努提 回答中映射为xml忽略大小写。
  2. 基于接口的。org.apache.tools.ant.DynamicElementorg.apache.tools.ant.AttributeElement

当使用特殊字符(如连字符)时,必须使用接口将XML标识符映射到Java标识符,如下所示:

代码语言:javascript
复制
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() {
   }
}
票数 1
EN

Stack Overflow用户

发布于 2014-11-10 10:59:59

org.apache.tools.ant.IntrospectionHelper是进行内省以从setter方法中提取属性的类。

来自构造函数的Javadocs:

void setFoo(Bar)被认为是一种设置属性foo值的方法,只要Bar是非无效的,并且不是数组类型。非字符串参数类型总是重载字符串参数类型,但这是根据优先级做出的唯一保证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26840149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档