Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java程序动态生成java类_Java_Code Generation - Fatal编程技术网

从java程序动态生成java类

从java程序动态生成java类,java,code-generation,Java,Code Generation,在项目的构建(编译)时,我需要为java类生成代码。生成的java类是一个带有一组getter和setter的JavaBean类。在构建时,我得到了类的名称和变量的名称。所以我需要做的是根据我掌握的信息动态生成JavaBean 在编译时,我得到了以下数据 class-name=Test variable-name=aaa 因此,generate类应该如下所示 public class Test { public String aaa; public void setVar(Stri

在项目的构建(编译)时,我需要为java类生成代码。生成的java类是一个带有一组getter和setter的JavaBean类。在构建时,我得到了类的名称和变量的名称。所以我需要做的是根据我掌握的信息动态生成JavaBean

在编译时,我得到了以下数据

class-name=Test
variable-name=aaa
因此,generate类应该如下所示

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] -

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

可以使用Eclipse中的JET:

ant可以调用它:


我从maven那里想到:

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

请记住,您需要可用的JDK,而JDK是不可再分发的,因此您的客户需要单独下载它(就像您现在在任何IDE中所做的那样)

例如,您可以通过以下方式以编程方式调用java编译器:


您可以使用
URLClassLoader

奇怪的建议加载它,但似乎您想要生成bean。为什么不使用apachecommon的DynaBean之类的工具呢?它们允许您在运行时创建bean。这是一个例子

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


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

您遗漏了很多信息…:-)例如,您是在谈论简单的数据bean,还是在setter和getter中有一些自定义操作?您正在部署哪种类型的构建系统-例如Maven,还是需要直接部署
javac
?请查看已经提出的问题[java代码生成][1][1]: