acj命令是用于编译java文件和aj文件的编译器,相当于eclipse的编译器(ECJ)+aspectj运行时扩展
aj5命令在jdk1.5上使用-javaagent:pathto/aspectjweaver.jar加载aspectj程序,达到修改字节码的目的
这两个命令可以用java命令和javac来替代,我们以上文的命令为例
Load-time weaving (LTW) 加载时编织
编译
ajc -outjar myjar.jar HelloWorld.java ajc -outjar MyAspect.jar -outxml MyAspect.aj -classpath "myjar.jar;%CLASSPATH%"
运行
aj5 -classpath "MyAspect.jar;myjar.jar;%CLASSPATH%" HelloWorld
命令翻译
若已经在classpath环境变量里设置过aspectjrt.jar,可在 -classpath里省略%ASPECTJ_HOME%\lib\aspectjrt.jar;下同
编译
javac HelloWorld.java jar cvf myjar.jar HelloWorld.class java -classpath "myjar.jar;%ASPECTJ_HOME%\lib\aspectjrt.jar;%ASPECTJ_HOME%\lib\aspectjtools.jar;%CLASSPATH%" org.aspectj.tools.ajc.Main -outxml MyAspect.aj -outjar MyAspect.jar
运行
java -javaagent:%ASPECTJ_HOME%\lib\aspectjweaver.jar -classpath "MyAspect.jar;myjar.jar;%ASPECTJ_HOME%\lib\aspectjrt.jar;%CLASSPATH%" HelloWorld
Compile-time weaving 编译时编织
编译
ajc -outjar mytarget.jar HelloWorld.java MyAspect.aj
运行
aj5 -classpath "mytarget.jar;%CLASSPATH%" HelloWorld
命令翻译
编译
java -classpath "myjar.jar;%ASPECTJ_HOME%\lib\aspectjrt.jar;%ASPECTJ_HOME%\lib\aspectjtools.jar;%CLASSPATH%" org.aspectj.tools.ajc.Main -outjar mytarget.jar HelloWorld.java MyAspect.aj
运行
java -classpath "mytarget.jar;%ASPECTJ_HOME%\lib\aspectjrt.jar;%CLASSPATH%" HelloWorld
Post-compile weaving 后编译时编织
编译
ajc -outjar myjar.jar HelloWorld.java ajc -inpath myjar.jar MyAspect.aj -outjar mytarget.jar
运行
aj5 -classpath "mytarget.jar;%CLASSPATH%" HelloWorld
命令翻译
编译
javac HelloWorld.java jar cvf myjar.jar HelloWorld.class java -classpath "myjar.jar;%ASPECTJ_HOME%\lib\aspectjrt.jar;%ASPECTJ_HOME%\lib\aspectjtools.jar;%CLASSPATH%" org.aspectj.tools.ajc.Main -inpath myjar.jar MyAspect.aj -outjar mytarget.jar
运行
java -classpath "mytarget.jar;%ASPECTJ_HOME%\lib\aspectjrt.jar;%CLASSPATH%" HelloWorld
翻译成java命令的好处是,可以在Load-time weaving (LTW) 加载时编织直接指定多个
-javaagent
如
java -javaagent:aspectjweaver.jar -javaagent:ZKMAgent.jar -cp Tracing.jar;ZKM.jar com.zelix.ZKM
转载于:https://blog.51cto.com/7317859/2109140