java – AspectJ:如何获取切入点来建议位于其他项目中的类

这应该很简单.


如何在一个项目中获得切入点来建议另一个项目中的代码/类?

上下文
我正在两个项目的日食工作.为了便于解释,让我们称之为一个科学项目和另一个数学项目,并说科学项目依赖于数学项目,我同时在两个项目中进行开发.数学项目是生产中的核心产品,如果我不修改代码,生活会更容易.

目前,我正在调试这两个项目之间的交互.为了帮助解决这个问题,我正在编写一个Aspect(在科学项目中)来记录关键信息,因为数学代码(和科学代码)会执行.


我运行一个简单的示例方面:

package org.science.example;

public aspect ScientificLog {
    public pointcut testCut() : execution (public * *.*(..));
    before() : testCut() {
        //do stuff
    }
}

问题
问题是,无论我创建什么切入点,它只建议来自科学项目的代码. org.math.example中没有类是横切的,所有!我尝试通过转换为属性>将数学项目添加到科学项目的inpath中. AspectJ Build>在路径中单击添加项目并选择数学项目.这没用,但似乎我需要按照这些方式做点什么.

在此先感谢您的任何建议…

-gMale

编辑1:
自写这篇文章以来,我注意到该项目出现以下错误:

Caused by: org.aspectj.weaver.BCException: Unable to continue, this version of AspectJ
supports classes built with weaver version 6.0 but the class
com.our.project.adapter.GenericMessagingAdapter is version 7.0
when batch building BuildConfig[null] #Files=52 AopXmls=#0

所以也许这是正确的设置,错误更微妙.顺便提一下,提到的课程来自“科学项目”,可以这么说.即使在我清理项目后也会发生这种情况.我目前正在谷歌上搜索这个错误……
编辑2:
我找到了上面错误的解决方案
comment #5 here

问题是maven-aspectj-plugin的pom文件声明了对aspectjtools版本1.6.7的依赖.因此,在配置插件时,必须修改该瞬态依赖性.这是pom文件的相关代码片段,通过指定版本1.6.9而不是1.6.7来解决问题:

                    <plugin>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>aspectj-maven-plugin</artifactId>
                            <version>1.3</version>
                            <dependencies>
                                <dependency>
                                    <groupId>org.aspectj</groupId>
                                    <artifactId>aspectjtools</artifactId>
                                    <version>1.6.9</version>
                                </dependency>
                            </dependencies>
                            <configuration>
                                    <source>1.6</source>
                                    <target>1.6</target>
                            </configuration>
                            <executions>
                                    <execution>
                                            <goals>
                                                    <goal>compile</goal>
                                                    <goal>test-compile</goal>
                                            </goals>
                                    </execution>
                            </executions>
                    </plugin>
最佳答案
你的第二个问题与第一个问题无关.据说com.our.project.adapter.GenericMessagingAdapter最初是针对新版本的AspectJ编译和编织的,但是用于对旧版AspectJ进行二进制编织.

这与您尝试在1.5 VM上运行1.6下编译的Java类时的问题基本相同.

版本号因为AspectJ 1.6.8的发布而加速(我认为,或者可能是1.6.7).

解决方案是确保您为所有项目使用最新版本的AspectJ(例如1.6.9或1.6.10的开发版).

转载注明原文:java – AspectJ:如何获取切入点来建议位于其他项目中的类 - 代码日志