2010-08-02 142 views
30

Java代碼生成的主要框架是什麼?Java代碼生成

我不是在尋找一個數據庫或應用程序生成工具。我有一個類的骨架,我需要爲不同的用例生成不同的動態部分。該類的大部分是相同的,因此我想運行生成不同風格類的代碼。

任何人都知道一個好的框架?

謝謝。

+5

你需要做什麼? – 2010-08-02 06:40:34

+4

http://c2.com/cgi/wiki?CodeGenerationIsaDesignSmell – oluies 2010-08-02 06:42:29

+2

你是想做一些特定的事情,還是隻是收集另一個框架列表的方式? – skaffman 2010-08-02 07:06:18

回答

14

cglib是一個強大的,高性能和高質量代碼生成庫

jet/velocity 正在使用的模板。

如果您希望生成整個應用程序,請檢查JBoss Seam框架。

+0

cglib由JUnit/EasyMock使用,因此可能已經包含在用戶項目中 – 2010-08-04 06:24:05

2

SQL2Java從數據庫模式生成數據庫CRUD代碼。

3

[SQL2JAVA]是一個很好的工具。它生成數據庫模式的所有[CRUD]代碼。它的連接池不夠好,你可以定製它的Manager類來維護你自己的池。

除此之外,如果你有興趣與驅動開發(MDD)模型時,可以使用[AndroMDA的]或[Borland的共同],最好[日食]基於工具的一個在那裏。

如果您有興趣進一步研究代碼生成並進入模型驅動的軟件開發,您應該看看[openArchitectureWare]。支持代碼生成

其他Java開發工具[龍目]和[。龍目島項目提供了諸如自動生成默認getter/setter方法,自動資源管理(使用@Cleanup註釋)和註解驅動異常處理等功能。

[CGLIB],[Velocity模板]和[AppFuse的]也很大。

+15

** [爲什麼] **是否將** [方括號] **放在** [東西] **周圍? :) – 2012-09-09 14:45:29

0

我推測ASM是最流行的Java字節碼生成庫。它是最底層的字節碼庫,但還有其他更高級的代碼生成庫建立在ASM上,儘管直接使用ASM也不是太困難(直接使用的一個好處是ASM的JAR大小非常大小)。一些ASM的用戶在http://asm.ow2.org/users.html


編輯提到:

有關更新的問題,其中提到的用例(「我有一個類的骨架,我需要生成它不同的使用情況下不同的動態部分「),我的答案是改進設計,以便刪除所有代碼重複並且不需要代碼生成。閱讀不同的設計模式可以給出一些關於如何去做的想法。對於更具體的答案,您需要顯示一些代碼並更加具體地瞭解您的需求。

+1

但是從編程的角度來看,它是一個PITA,從某種意義上說,生成源在某種意義上更容易。 – 2010-08-02 09:21:45

+0

取決於你需要做什麼。字節碼生成也可以在運行時完成,它可以用來修改現有的類,所以它生成源文件更強大。 – 2010-08-02 19:56:01

+3

這個問題是關於代碼生成的;不編譯。 ASM的要求太低了。 – Recurse 2010-08-06 04:49:05

2

我用德魯伊數據庫管理器:http://druid.sourceforge.net/

它從數據庫開始,可以進行逆向工程,而且它可以生成基於表和字段的文件,SQL類和文件。

使用的模板語言是速度。

該軟件可通過插件系統進行擴展。

0

AtomWeaver http://www.atomweaver.com現在處於公開測試版。這是一個代碼生成IDE,可以與當前的IDE一起使用(因此,它不是框架,而是獨立的應用程序)。有了它,你可以生成樣板代碼,但也是一個完整的項目。 AtomWeaver實現了ABSE(基於原子的軟件工程),這是一種模型驅動的軟件開發形式(與UML或MDA無關)。

它本質上是一個基於模板的系統。

6

http://www.andromda.org

AndroMDA的(發音:仙女座)是一個開放的源代碼生成的框架下面的模型驅動架構(MDA)的範例。它從CASE工具獲取模型並生成完全可部署的應用程序和其他組件。

我已經使用它,它是非常強大的。它不僅從UML生成配置文件和代碼,而僅僅是爲開發人員實現開發的業務方法,還通過使用衆所周知的dessing模式來維護生成代碼。

3

嘗試Xtext(http://www.eclipse.org/Xtext/)。您使用XText來定義DSL,XText將生成支持此DSL的Eclipse編輯器。然後你可以使用XP和定義模板來生成所有類型的文本(例如java源代碼)。

0

對Velocity模板引擎的另一投票。我已經在多個項目中使用過它,用於生成EJB2.1樣板代碼,數據庫對象等等。它很好用,而且很容易學習。