将相同的方面编织成多个罐子

时间:2011-09-30 14:00:52

标签: aop aspectj dacapo

我一直在使用AspectJ(ajc)正确编织这个项目。情况如下:

我正在使用名为DaCapo Benchmarks的基准测试库,在其中我试图拦截对Iterator.HasNext()和Next()[学术研究]的所有调用。这似乎是在真空中工作,但是DaCapo的工作方式使得它自己的jar包含其他jar,它根据我想要运行的基准和它的依赖关系运行它。

我希望拦截所有HasNext()和Next()s具有相同的方面,以便在所有jar文件中跟踪我的总数,而不是在每个文件中跟踪。

我希望我的表现足够清楚。我完全可以回答您的任何问题,以便能够帮助我解决这个奇怪的问题。

P.S。我有一种奇怪的感觉,它实际上并不可行,但是使用AJDT进行日食测试(我使用原始aspectj和ajc进行DaCapo基准编织)暗示了这种可能性。

2 个答案:

答案 0 :(得分:1)

我知道为时已晚,但可能会帮助其他人。

无论我从你的问题中理解了什么,你都希望在多个罐子中挥动相同的方面。

所以有两种方式

  1. 如果你正在使用eclipse:
  2. 然后创建方面项目并转到其属性>单击左侧面板上的方面构建选项>选择右侧面板中的路径选项卡>现在点击添加外部罐子>将想要挥动方面的罐子添加到>单击确定

    再次转到其属性>单击左侧面板上的aspect aspect选项>选择右侧面板上的Output jar选项卡>并为您要创建的新jar命名。 。>点击确定。

    创建并编写您的方面,构建或清理您的项目。它将通过你在"输出jar"中给出的名称在项目的根目录中生成jar。并且这个罐子将包含你在inpath罐子中给出的所有罐子,并且方面挥动。 。而已 。

    1. 如果您正在使用命令propmt:

      编写您的方面以拦截您想要的方法。>现在在命令提示符下触发命令:

        

      ajc -inpath myJar1.jar -inpath myJar2.jar myAspect.java -outjar MyOutputJar.jar

    2. 多数民众赞成它会生成最终的jar,包含你在路径中所有的jar。 。您可以使用尽可能多的-inpath,以便将代码扩展为多个jar。 对于任何依赖项错误,请在类路径中提供所需的依赖项jar。

答案 1 :(得分:0)

如果您正在使用加载时编织,则不太可能这样做。存在循环问题。您需要编织JDK,但编织者需要JDK加载自身,因此无法使用LTW编写JDK的许多部分。

因此,您需要进行编译时编织。这样的事情会起作用:

ajc -inpath rt.jar -outjar woven_rt.jar *.aj

我不确定这是否是您遇到的问题,但它可能会解决问题。