2011-08-27 86 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類文件(如果需要,刪除螞蟻中的舊文件)。然後正常編譯。