Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AspectJ:如何获取切入点来建议位于其他项目中的类_Java_Eclipse_Aspectj_Ajdt_Pointcuts - Fatal编程技术网

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

Java AspectJ:如何获取切入点来建议位于其他项目中的类,java,eclipse,aspectj,ajdt,pointcuts,Java,Eclipse,Aspectj,Ajdt,Pointcuts,这应该很简单 问题 如何在一个项目中获得切入点,以建议另一个项目中的代码/类? 上下文 我在eclipse中从事两个项目。为了便于解释,让我们分别调用一个科学项目和另一个数学项目,假设科学项目依赖于数学项目,我同时在这两个项目中进行开发。数学项目是生产中的核心产品,如果我不太修改代码,生活会更轻松 目前,我正在调试这两个项目之间的交互。为了帮助实现这一点,我正在编写一个方面(在科学项目中)来记录数学代码(和科学代码)执行时的关键信息 示例 我运行了一个简单的示例方面,内容如下: packag

这应该很简单

问题
如何在一个项目中获得切入点,以建议另一个项目中的代码/类?
上下文
我在eclipse中从事两个项目。为了便于解释,让我们分别调用一个科学项目和另一个数学项目,假设科学项目依赖于数学项目,我同时在这两个项目中进行开发。数学项目是生产中的核心产品,如果我不太修改代码,生活会更轻松

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


示例
我运行了一个简单的示例方面,内容如下:

package org.science.example;

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

问题
问题是,无论我创建了什么切入点,它都只建议来自科学项目的代码。没有来自
org.math.example
的课程是横切的

我尝试将数学项目添加到科学项目的inpath,方法是转到
项目属性>AspectJ构建>inpath
,然后单击添加项目并选择数学项目。这不管用,但我似乎需要按照这些思路做些事情

提前感谢您的建议

-格梅尔
编辑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 原因:org.aspectj.weaver.BCException:无法继续,此版本的aspectj 支持使用weaver版本6.0构建的类,但 com.our.project.adapter.GenericMessageAdapter是7.0版 批量生成BuildConfig[null]#Files=52 AopXmls=#0时 因此,也许这是正确的设置,错误更微妙。顺便说一句,所提到的课程可以说是来自“科学项目”。即使在我清理项目之后,这种情况也会发生。我正在用谷歌搜索这个错误…
编辑2:
我在中找到了上述错误的解决方案

问题在于maven aspectj插件的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>

org.codehaus.mojo
aspectj maven插件
1.3
org.aspectj
aspectjtools
1.6.9
1.6
1.6
编译
测试编译

将数学项目添加到科学项目路径中时,所有数学项目的代码都通过aspectj weaver发送并正确编织。该编织的结果将写入科学项目的输出文件夹(而不是数学项目的)。所以,如果您要查看科学项目的bin文件夹,您应该会在那里看到编织类

如果要将路径内文件与常规文件分开,可以指定输入/输出文件夹。此文件夹还应作为二进制文件夹添加到类路径中。此外,该文件夹应该放在科学项目Java构建页面的“导出和订购”选项卡中的项目对数学项目的依赖项之上


最后,如果您从科学项目而不是数学项目运行主类,您将执行编织代码。

您的第二个问题与第一个问题无关。据说com.our.project.adapter.GenericMessagingAdapter最初是针对新版本的AspectJ编译和编织的,但现在正用于针对旧版本的AspectJ进行二进制编织

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

AspectJ 1.6.8(我想,或者可能是1.6.7)的发行版增加了版本号


解决方案是确保所有项目(如-1.6.9或1.6.10的开发版本)都使用最新版本的AspectJ。

感谢您的回复。基本上,您已经为我确认,我应该能够让它工作,并且inpath是正确的方式。自从写了这个问题之后,我现在注意到了一个错误,我正在谷歌上搜索。也许这是唯一的问题。。。我将用错误更新问题。谢谢,你完全正确。我刚刚解决了这个异常,并相应地更新了上面的问题。不幸的是,为了时间起见,我基本上被指示将“数学项目”直接拉入“科学项目”。显然,这避免了问题,但我无法确定修复第二个错误的影响,因为现在代码库完全不同,在subversion中回溯将花费太多时间。谢谢你的帮助。因为你是唯一的回应,我会投票给你所有的信息,并奖励你答案。谢谢