2012-01-26 94 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添加到启动程序配置中解决了它。