在我的项目的构建(编译)时,我需要为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
答案 0 :(得分:6)
为什么不在构建期间使用自定义ant任务或Maven插件生成.java文件?这似乎是一项相当容易的任务,不需要任何复杂的库。您甚至可以使用带有占位符的模板文件作为类名和字段名,并使用replace
任务生成真正的.java文件。
答案 1 :(得分:1)
可以使用Eclipse的JET:
http://eclipse.org/articles/Article-JET/jet_tutorial1.html
蚂蚁可以调用它:http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jet.doc/references/ant/antTasks.xhtml
我想从maven:http://mvnrepository.com/artifact/org.eclipse/jet/0.8.0-v20070605
答案 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中的旧文件)。然后正常编译。