gpt4 book ai didi

java - AspectJ:如何获取切入点以通知位于其他项目中的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:29 26 4
gpt4 key购买 nike

这应该很简单。

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


上下文
我在 Eclipse 中从事两个项目。为了便于解释,我们将一个 科学项目和另一个 数学项目称为科学项目依赖于数学项目,我正在同时开发这两个项目。数学项目是一个核心产品,在生产中,如果我不对代码做太多修改,生活会更轻松。

目前,我正在调试这两个项目之间的交互。为此,我正在编写一个方面(在科学项目中)以在数学代码(和科学代码)执行时记录关键信息。


示例
我按照以下行运行一个简单的示例方面:

package org.science.example;

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


问题
问题是,无论我创建什么切入点,它都只会建议来自 科学项目的代码。 org.math.example 中没有任何类是横切的,完全没有!

我尝试将 数学项目添加到 inpath 科学项目,方法是转到 proect properties > AspectJ Build > Inpath 并单击 add project 并选择 math project。这没有用,但似乎我需要按照这些思路做些事情。

提前感谢您提出任何建议...

-g男


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

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

So maybe this is setup properly and the error is more subtle. BTW, the class mentioned is from the "science project," so to speak. This happens even after I clean the project. I'm currently googling this error...


EDIT 2:
I found the solution to the error above in comment #5 here

The problem is the maven-aspectj-plugin's pom file declares a dependency on aspectjtools version 1.6.7. So, when configuring the plugin, that transient dependency has to be modified. Here's the related code snippet for the pom file that fixes the problem by specifying version 1.6.9 instead of 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:如何获取切入点以通知位于其他项目中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3679589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com