从java程序动态生成java类

时间:2011-08-27 18:33:12

标签: java code-generation

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

例如。在编译时我得到了以下数据。

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

4 个答案:

答案 0 :(得分:6)

为什么不在构建期间使用自定义ant任务或Maven插件生成.java文件?这似乎是一项相当容易的任务,不需要任何复杂的库。您甚至可以使用带有占位符的模板文件作为类名和字段名,并使用replace任务生成真正的.java文件。

答案 1 :(得分:1)

答案 2 :(得分: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

加载它

答案 3 :(得分:1)

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

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

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