我遇到了 aspectj-maven-plugin 和 Eclipse Juno 的一个奇怪问题。我的 pom 的构建部分中有以下插件 defn:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
<source>1.7</source>
<target>1.7</target>
<Xlint>ignore</Xlint>
<complianceLevel>1.7</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>true</verbose>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
@Aspect
我在我的 src/test/java/... 文件夹中 有一个声明。
如果我从命令行构建(即:mvn clean package),我的类将正确/按预期构建。
但是,当我从 Eclipse 中构建时,我的测试文件夹中声明的方面被编织到我的输出类文件夹 .class 文件中,而不是 test-classes 文件夹(通过使用反编译器确认)。
我的配置不正确吗?我的 Eclipse 项目中是否缺少一个设置来指示在编译时忽略这些方面?如果我在 Eclipse 中检查我的 Java Build 路径配置,我会看到 src/main/java -> target/classes 而 src/test/java-> target/test-classes。
这可能与配置的生命周期映射有关吗?我有:
Plugin Extension Mapping Source
aspectj:compile configurator extension
aspectj:test-compile configurator extension
我安装了 AJDT 1.7.3 (org.aspectj) 和 2.2.3 (org.eclipse.ajdt)(我不知道为什么它安装了这两个版本)。
更新 2
我将我的 Aspectj-maven-plugin 配置更新为以下配置并覆盖了 m2e 连接器设置,它似乎可以工作,但如果这适用于其他人,我希望进行第 3 方验证,因为它似乎依赖于编辑器/配置.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sources>
<source>
<basedir>${project.build.sourceDirectory}</basedir>
<includes>
<include>**/*.aj</include>
<include>**/*.java</include>
</includes>
</source>
</sources>
</configuration>
</execution>
<execution>
<id>test compile</id>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sources>
<source>
<basedir>${project.build.testSourceDirectory}</basedir>
<includes>
<include>**/*.aj</include>
<include>**/*.java</include>
</includes>
</source>
</sources>
<weaveDirectories>
<param>${project.build.outputDirectory}</param>
</weaveDirectories>
</configuration>
</execution>
</executions>
<configuration>
<verbose>true</verbose>
<outxml>true</outxml>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>${java.version}</source>
<target>${java.version}</target>
<complianceLevel>${java.version}</complianceLevel>
<showWeaveInfo>true</showWeaveInfo>
</configuration>
</plugin>
使用以下 m2e 配置覆盖 AJDT/m2e 0.14 框架附带的 m2e 连接器设置:org.eclipse.m2e 生命周期映射 1.0.0 org.codehaus.mojo aspectj-maven-plugin [1.7,) 编译 org.codehaus.mojo aspectj-maven-plugin [1.7,) 测试编译
如果这对其他人有效,下一步是尝试了解 m2e 连接器如何/为何失败,以及需要修复的位置。
我将我的测试代码(包括@kriegaex 测试项目)上传到我的 github 示例项目:github.com/benze/aspectj-maven-plugin-defect-example.git。根据自述文件,要启用/禁用覆盖 m2e-connector,请启用 override-m2e-lifecycle 配置文件。