2011-08-27 78 views
4

在我的项目的构建(编译)时,我需要为java类做代码生成。生成的java类是一个带有一组getter和setter的java bean类。在构建时,我得到类的名称和变量的名称。所以我需要做的是从我拥有的信息中动态生成java bean。从java程序动态生成java类

例如。在编译时,我正在获得以下数据。

class-name=Test 
variable-name=aaa 

所以生成类应该看起来像下面。

public class Test { 
    public String aaa; 
    public void setVar(String str) { 
     this.aaa = str; 
    } 
    public String getVar(){ 
     return this.aaa; 
    } 
} 

当我搜索了一个工具,我可以使用,我发现Arch4j [1]有趣但这个问题是不是与Apache 2.0许可兼容。我正在寻找一个与Apache 2.0许可兼容的项目/工具。

我将不胜感激,如果有人可以给我我怎么可以这样一些见解。

[1] - http://arch4j.sourceforge.net/components/generator/index.html

+0

您将遗漏很多信息... :-)例如,你是在谈论简单的数据bean还是你有一些自定义操作作为setter和getter的一部分?您正在部署哪种类型的构建系统 - 例如Maven还是需要直接部署'javac'? –

+0

请看看已经问的问题[Java的代码生成] [1] [1]:http://stackoverflow.com/questions/6973580/java-code-generation/ –

回答

6

为什么不直接生成您的构建过程中的.java文件,使用自定义Ant任务或Maven插件?这似乎是一个相当简单的任务,它不需要任何复杂的库。您甚至可以使用带占位符的模板文件作为类名称和字段名称,并使用replace任务生成真实的.java文件。从Eclipse的

1

看看javax.tools包。您只能使用该包创建和加载动态生成的类。

在脑子里只想要给你需要的JDK可用,这不是重新分配使您的客户将需要单独下载它(就像你在任何IDE今天这样)

http://download.oracle.com/javase/6/docs/api/javax/tools/package-summary.html

例如,你可以用编程方式调用Java编译器:

http://download.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html

你还可以用URLClassLoader

加载
1

奇怪的建议,但它好像你想要生成豆。为什么不使用类似apache common的DynaBean?它们允许您在运行时创建bean。这是一个example of using DynaBean

当然,这是在运行时间,而不是编译时间。对于编译时,我会推荐使用ant任务来编译源代码,并为您的类的生成添加一个编译依赖项。您可以通过编写一个使用velocity作为java类模板引擎的小型Java应用程序来处理类生成。

因此,你的编译蚂蚁任务首先调用一个小的Java程序,使用velocity模板生成java类文件(如果需要,删除蚂蚁中的旧文件)。然后正常编译。