2010-03-28 60 views
12

我正在尋找一個維護良好的Java字節碼操作庫,它具有直觀的API。那裏似乎有相當多的人。任何建議在哪些嘗試?Java字節碼操作庫建議

回答

6

您的問題的最佳答案將受您的具體需求和目標支配;如果你可以擴展你想要完成的任務,我可以提供更加適合的迴應。

的代稱,但是,根據我的經驗,ASM可能提供成熟,靈活性的最佳組合,和易於使用:

  • 這是在相對積極的發展:即使最新發布從2009年6月開始,開發人員會定期向其VCS提交提交。
  • 它已被廣泛用於許多着名的Java產品中,例如AspectJ,Groovy,Cobertura和許多其他產品,這些產品有廣泛的用戶羣,因此有廣泛的支持社區。
  • 它有相當全面的文檔記錄,並且從OW2 Consortium和整個社區都有大量的教程,用戶指南和參考文檔。

N.B. @Yuri下面留下的評論描述了我個人尚未遇到但可能構成重大障礙的情況。在評估各種字節碼操作庫時,記住他的觀察/經驗。

+0

對此問題缺乏具體細節感到抱歉。我不想說出我在做什麼的具體細節,但你的回答很有幫助。謝謝。我想我最終會使用ASM。 – Daniel 2010-03-28 08:16:24

+1

看着這個答案我試了ASM,它(4.0)有一個錯誤或真正奇怪的行爲。我正在使用Tree API並遍歷方法的指令InsnList。現在,第一次迭代給出了一個結果,第一次迭代後的另一個結果給出了另一個結果 - 一條指令被複制並放在列表的頂部。根本沒有修改代碼,只有兩個迭代一個接一個。切換到Javassist。 – 2012-10-04 12:42:16

+0

@YuriUshakov:這不是我親身經歷的情況。感謝您的提醒! – RTBarnard 2012-10-18 04:56:52

4

這實際上取決於你如何定義直觀 ;-)兩週前我開始使用ASM來完成當前項目的某個任務,它的工作方式就像一個魅力。它只花了我幾個小時來理解它並能夠使用它,但我不會直接調用API。但是,如果您對Java字節碼有一點了解並熟悉訪問者模式,那麼學習曲線並不是很高,IMO。

ASM的另一個優勢是,它明顯與至少在Sun JDK中的標準API捆綁在一起,儘管它們位於不同的包(com.sun.xml.internal.ws.org.objectweb.asm和子包)中。

+0

你是對的:通過一些奇怪的API來判斷,人們對直覺的定義似乎差異很大;)。我剛剛花了一點時間看着ASM,而且我的預測遠沒有預期的那麼嚴重!我想我會堅持下去。感謝您的回答。 – Daniel 2010-03-28 08:14:16

+0

請不要使用實施軟件包... – 2010-03-28 11:14:21

+1

是的,沒錯,不要使用實現包。並且不要操縱字節碼,除非你真的必須;-) – 2010-03-29 05:57:02