2013-11-20 88 views
1

所以我从AspectJ开始,并有一个问题。下面的例子在Eclipse中完美工作,但是当我尝试在bash中运行它时 - 它不起作用。命令行加载时编织

这是我的代码,我将监测:

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

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

这是我的看点类:

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"); 
     } 
    } 

我要做的就是创建罐子叫做 'apsects.jar' 与META-INF/aop-ajc.xml

<?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方面此应用程序?

+0

这是一个类路径问题。编译的TestClass.class在哪里?很可能你错过了需要调用javac,编译类文件和ajc编译方面的阶段。 – aepurniet

+0

TestClass.class位于工作目录中,我运行java命令。方面被编译成jar文件。我不需要调用ajc,因为我使用带注释的AspectJ – Darek

+0

只需添加一个“aspects.jar; /home/tdi/dev/test/aspectjrt.jar ;.” - 编辑(Windows路径分隔符) – aepurniet

回答

0

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

另一种选择是将你的运行命令与eclipse的命令进行比较。您可以这样做,即以调试模式运行项目,然后右键单击该进程并打开其属性。然后你可以看到eclipse如何在命令行上运行项目。