命令行加载时编织

时间:2013-11-20 22:21:10

标签: java annotations aspectj

所以我开始使用AspectJ并遇到问题。以下示例在Eclipse中完美运行,但是当我尝试在bash中运行它时 - 它不起作用。

这是我将监控的代码:

public class TestClass {
  public static void method1() {
    System.out.println("Hello World!");
  }

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

这是我的Aspect类:

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

    @Aspect
    public class LogMe {
        @Pointcut("call(public* TestClass.*())")
        public void metCall() {}

        @After("metCall()")
        public void aftercallAdvice() {
            System.out.println("Blah");
        }
    }

我所做的是用META-INF/aop-ajc.xml

创建名为'apsects.jar'的jar
<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
        <aspects>
                <aspect name="LogMe"/>
        </aspects>
        <weaver options="-showWeaveInfo"/>
</aspectj>

我试着像那样运行它:

java -javaagent:/home/tdi/dev/test/aspectjweaver.jar -classpath "aspects.jar;/home/tdi/dev/test/aspectjrt.jar" TestClass

我得到的是:

Error: Could not find or load main class TestClass

如何使用LTW方面运行此应用程序?

1 个答案:

答案 0 :(得分:0)

也许这可能是TestClass与方面一起不在JAR文件中的问题。您可以尝试将带有META-INF的文件夹aop-ajc.xml放入带有TestClass.class的工作目录中。

另一个选择是比较你的run命令和eclipse的命令。您可以在调试模式下运行项目,然后右键单击该过程并打开其属性。然后你可以看到eclipse如何在命令行上运行项目。