2010-04-12 40 views
6

有沒有人知道用於Java的工具(類似於C#的codedom),它提供了一種將Java代碼生成到.java文件的方法?Java代碼生成(Metaprogramming,Reflection,wtv)

編輯: 我正在構建一個平臺,其主要目標是自動化操作。給一些輸入,我想爲外部工具生成代碼。所以它不是在運行時生成的。我想生成並輸出到一個實際的文件。

+1

什麼代碼生成的一種,適合什麼樣的程序?是否在運行時生成代碼?請更具體一些。 – 2010-04-12 16:52:36

+0

這裏的最終目標是什麼? Java有許多用於創建或修改字節碼(編譯的Java代碼)的工具,但我不知道用於直接生成Java代碼。 – ig0774 2010-04-12 16:57:21

+0

我正在構建一個平臺,其主要目標是使操作自動化。給一些輸入,我想爲外部工具生成代碼。所以它不是在運行時生成的。我想生成並輸出到一個實際的文件。 – 2010-04-12 17:09:56

回答

0

我已經有一些成功使用ASM既可以在字節碼級別修改現有的類,或在飛行中生成全新的類。 tutorial以一種非常容易理解的方式引導你。

ASM像大多數這樣的工具生成的字節碼不是源碼。原因是如果你想動態生成和執行程序中的新代碼,歷史上它並不是直接調用Java編譯器。因此,通常比源代碼更容易生成和使用字節碼。

如果您需要在程序中立即生成並運行代碼,我建議您使用字節碼操作工具。如果您只需要Java源代碼,那麼我會推出自己的代碼生成器,它將採用我的輸入格式並生成代碼。你可能想要尋找一個framework來幫助你,但是由於源文件只是文本,通常你自己創建它一樣容易,特別是如果你有一個自定義的輸入格式。

+0

如果我想在運行時改變某些東西,那將會很不錯,但我實際上會生成靜態代碼以供進一步使用。 – 2010-04-12 17:24:26

+1

ASM不僅僅用於字節碼修改。如果你不需要源代碼,它將是完美的。尤其是使用偉大的Eclipse字節碼大綱。 – tcurdt 2010-04-13 12:29:10

+0

謝謝,但Freemarker可以做我想要的東西(: – 2010-04-16 10:06:23

0

什麼你可以嘗試是使用現有的語法(例如,從ANTLR)和構建AST看到。然後從AST生成代碼。這應該比簡單的模板更健壯。對於中間的東西,我建議來自Terence Parr的(令人大開眼界)關於StringTemplate的談話。 (對不起,手頭上沒有鏈接)

+0

謝謝,但Freemarker可以做的事情我想(: – 2010-04-16 10:06:41

0

我不確定你真的需要什麼,但看看javassist。這是你正在尋找的東西嗎?

1

ABSE和AtomWeaver組成了一個代碼生成和模型驅動開發框架,您可以輕鬆實現您想要的內容。 ABSE是一種新的方法,您可以使用較小的位(稱爲Atoms)組成代碼生成器,AtomWaver是一個直觀的IDE,可讓您實施,操作和使用您的生成器模型。

它也允許非程序員構建程序/配置/任何,從已經建成的部分(你以前準備的原子)製成。

該項目目前正在公開發布,現在alpha版本已經上市。 ABSE是開放的,AtomWeaver是免費的個人和商業用途。

這裏獲取更多信息:http://www.abse.info(聲明:我是這個項目的負責)

+0

謝謝,但Freemarker可以做我想要的東西(: – 2010-04-16 10:05:50