2012-01-26 122 views
4

我正在嘗試使用面向方面的編程。我已在Eclipse中安裝AspectJ-Plugin,並遵循此tutorial中提及的所有步驟。
創建方面之間的所有連接工作,但是當我嘗試運行該項目,我收到以下異常:AspectJ:驗證錯誤

HelloException in thread "main" java.lang.VerifyError: Expecting a stackmap frame at branch target 6 in method helloworld.World.<clinit>()V at offset 0 
at helloworld.Hello.sayHello(Hello.java:11) 
at helloworld.Hello.main(Hello.java:6) 

當我清空類World.aj並運行該項目,一切工作和我在控制檯中收到預期的「Hello」。


下面是我在本教程中創建的類:

Hello.java

package helloworld; 

public class Hello { 

    public static void main(String[] args) { 
      sayHello(); 
    } 

    public static void sayHello() { 
      System.out.print("Hello"); 
    } 
} 

World.aj

package helloworld; 

public aspect World { 

    pointcut greeting() : execution(* Hello.sayHello(..)); 

    after() returning() : greeting() { 
     System.out.println(" World!"); 
    } 

} 

回答

1

我也跟着教程,並遇到同樣的錯誤。這是我如何解決它。

我發現默認情況下使用我的eclipse JavaSE-1.7選擇的執行環境JRE與AspectJ有關。所以你必須做的是改變執行環境JRE,例如選擇JavaSE-1.6。

之後,你可以按照教程,並獲得所需的輸出! :)

希望這有助於!

4

問題似乎並不相關到AOP。

我認爲這是這裏所描述的相同的Eclipse錯誤: https://bugs.eclipse.org/bugs/show_bug.cgi?id=362591

Ayushman耆那教2011-11-02 2時47分32秒說: 如果你堅持,請使用VM參數 - XX:-UseSplitVerifier運行 程序。我確認這個選項沒有驗證錯誤。

可能你還可以嘗試下載最新版本的eclipse。

2

我沒有點上@KC答案,這爲我工作發表評論,

所以把這個作爲一個附加的應答

 -XX:-UseSplitVerifier 

爲我所做的工作

我有一個AspectJ項目在eclipse 3.7 中運行良好,然後突然開始出現錯誤 將-XX:-UseSplitVerifier添加到啓動程序配置中解決了它。