Java - 使用Ant自动生成样板代码

时间:2012-11-13 12:59:18

标签: java ant code-generation building precompile

说明: 我在尝试之前问这个问题,因为我对Apache Ant有0经验而失败并感到沮丧。一个简单的是,这将是有效的'可能就够了,或者如果它不会告诉我会发生什么。

情况: 我正在开发一个使用JavaFX创建GUI的项目。 JavaFX依赖于类似Java Bean的对象,这些对象需要大量的样板代码才能获得它的属性。例如,我想要的所有功能都是名为 name String ,其默认值为"未命名" ,或者在最小的Java语法:

String name = "Unnamed";

在JavaFX中,最少量的代码会增加很多,以提供相同的功能(在这种情况下,功能对我来说意味着我可以设置并获取某个变量以在我的程序中使用):

private StringProperty name = new StringProperty("Unnamed");
public final String getName() { return name.get(); }
public final void setName(String value) { name.set(value); }

问题:我可以使用Ant生成此样板代码吗?

似乎可以使Ant脚本充当(Java)预处理器。例如,通过使用正则表达式替换(https://ant.apache.org/manual/Tasks/replaceregexp.html)函数。我在我的代码中考虑了与此类似的代码行,然后将自动替换:

<TagToSignifyReplaceableLine> StringProperty person "Unnamed"

最后评论:在我之前从未使用过Ant之前我已经说过了,所以我想和你联系,1)这可以做到2)如果这是好的这样做的方式或者有更好的方法。

谢谢!

4 个答案:

答案 0 :(得分:0)

我知道可以这样做,因为我以前的公司使用ant在java中生成模型对象。

他们使用的方法是在XML文件中定义模型对象并运行ant任务以生成pojo和dto。

我快速搜索,发现有些工具允许您从XML生成java。您可以在XML中提供模式/默认值等,并且有一个运行该工具的任务。

答案 1 :(得分:0)

是的,可能。您甚至可以实现自己的Ant任务,它可以非常轻松地完成这项工作。

蚂蚁中有这样的事情:

<taskdef name="codegen" classpath="bin/" classname="com.example.CodeGen" />

然后

<codegen className="Test.java">
   <Property name="StringProperty.name" value="Unnamed"/>
</codegen>
然后,CodeGen.java就像这样:

public class CodeGen extends Task {
    private String className = null;
    private List properties = new ArrayList();

    public void setClassName(String className) {
        this.className = className;
    }

    /**
     * Called by ant for every &lt;property&gt; tag of the task.
     *  
     * @param property The property.
     */
    public void addConfiguredProperty(Property property) {
      properties.add(property);
    }

    public void execute() throws BuildException {
        // here we go!
    }

}

答案 2 :(得分:0)

我会特别关注JSR-269:genftw这使得JSR-269更容易......

是的,它可以与Ant一起使用,甚至不必编写插件,并且比脆弱的RegEx更好。

另一个选择,如果您真正冒险的是检查XText代码生成,但它相当复杂。

答案 3 :(得分:0)

是的,可以这样做: - )

我曾经写过一个webservices适配器,它使用WSDL文档(描述基于SOAP的web服务的XML文件)来生成实现产品功能接口的POJO Java类。引导我这样做的是无意识重复的Java代码,这是与我们的专有系统交流所必需的。

技术解决方案使用XSLT样式表将输入XML文档转换为输出Java文本文件,该文件随后由ANT编译。

<!-- Generate the implementation classes -->
<xslt force="true" style="${resources.dir}/javaServiceStub.xsl" in="${src.dir}/DemoService.wsdl" out="${build.dir}/DemoService/src/com/myspotontheweb/DemoServiceSkeleton.java" classpathref="project.path">
    <param name="package" expression="com.myspotontheweb"/>
    ..
    ..
</xslt> 

不幸的是,XSLT最接近本机ANT支持的模板引擎。

祝你好运!