我一直在用AspectJ正确编织这个项目时遇到问题。情况是这样的:
我正在使用一个名为DaCapo Benchmark的基准库,并在其中尝试拦截对Iterator.HasNext()和Next()学术研究的所有调用。这似乎是在真空中工作,但是DaCapo的工作方式是它自己的jar包含其他jar,它根据我想要与它的依赖项一起运行的基准来提取这些jar,并运行它。
我希望截取具有相同方面的所有HasNext()和Next(),以便在所有jar文件而不是每个单独的jar文件中跟踪我的合计。
我希望我给人的印象足够清晰。为了能够帮助我解决这个奇怪的问题,我完全可以回答你可能有的任何问题。
附注:我有一种奇怪的感觉,这实际上并不可行,但在eclipse中使用AJDT (我使用raw aspectj和ajc进行DaCapo基准编织)的测试暗示了这种可能性。
发布于 2014-07-08 19:23:23
我知道为时已晚,但也许能帮助其他人。。
无论我从你的问题中理解到什么,你都想在多个jars中挥动相同的方面。
所以有两种方法
如果您正在使用eclipse,请使用
然后创建aspect项目并进入其属性>单击左侧面板上的aspect build选项>选择右侧面板上的inpath选项卡>现在单击add external jars >添加您希望将aspect挥发到其中的jars >单击OK
再次转到它的属性>单击左侧面板上的aspect build选项>选择右侧面板上的Output jar tab >并为您想要创建的新jar指定名称。.>click好的。
创建并编写方面,构建或清理项目。它将根据您在"output jar“中给出的名称在项目的根目录中生成jar,并且这个jar将包含您在inpath jar中给出的所有jar,并带有aspect。。就是这样。。
编写你的aspect来拦截你想要.>的方法,现在在命令提示符下执行下面的命令:
MyOutputJar.jar -inpath myJar1.jar -inpath myJar2.jar myAspect.java -outjar ajc
就这样,它将生成包含您在inpath中提到的所有jar的最终jar。。您可以使用任意数量的-inpath,只要您想要将代码写入其中。对于任何依赖错误,在类路径中提供所需的依赖jars。
发布于 2011-10-02 05:41:39
如果您使用的是加载时编织,这是不太可能的。有一个循环性的问题。您需要编织JDK,但是编织器需要JDK加载自身,所以JDK的许多部分不能使用LTW编织。
因此,您将需要使用编译时织入。像这样的东西将会起作用:
ajc -inpath rt.jar -outjar woven_rt.jar *.aj我不确定这是否是您遇到的问题,但它可能会解决问题。
https://stackoverflow.com/questions/7611506
复制相似问题