Java 命令行加载时间编织
所以我从AspectJ开始,遇到了一个问题。下面的示例在Eclipse中非常有效,但当我尝试在bash中运行它时,它不起作用 这是我将监控的代码:Java 命令行加载时间编织,java,annotations,aspectj,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(); } } 这是我的方面类:
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");
}
}
我要做的是用META-INF/aop ajc.xml
with创建名为“apspects.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
我得到的是:
错误:无法找到或加载主类TestClass
如何使用LTW特性运行此应用程序 可能是TestClass与方面不在JAR文件中的问题。您可以尝试将带有
aop ajc.xml
的文件夹META-INF
放入带有TestClass.class的工作目录中
另一个选项是将run命令与eclipse命令进行比较。您可以在调试模式下运行项目,然后右键单击进程并打开其属性来完成此操作。然后您可以在命令行上看到eclipse是如何运行项目的。这是一个类路径问题。编译的TestClass.class在哪里?很可能您缺少了一个需要调用javac来编译类文件的阶段,ajc来编译aspects.TestClass.class位于工作目录中,我在其中运行java命令。方面被编译成jar文件。我不需要调用ajc,因为我使用带注释的AspectJJ,只需添加一个“aspects.jar;/home/tdi/dev/test/aspectjrt.jar;”编辑(windows路径分隔符)@aepurniet adding.”不会更改任何内容。我很困惑。“java TestClass”找到该类了吗?如果不能,那么这是一个类路径问题。如果你可以的话,那就跟织布工的代理人有关。