重新导入Maven项目到IntelliJ后AspectJ后编译模式自动关闭如何解决?
解决方法
想让IntelliJ重新导入Maven项目后,AspectJ facet的「post compile weave mode」保持勾选状态,你需要修改pom.xml里的AspectJ Maven插件配置,明确指定使用后编译织入模式——这样IntelliJ就能自动识别并保留这个设置,不会每次重导就重置。
1. 配置AspectJ插件为后编译织入模式
找到pom.xml中的aspectj-maven-plugin,调整执行阶段和织入目录,让插件在Java编译完成后再处理class文件:
<build> <plugins> <!-- AspectJ 核心插件配置 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.14.0</version> <!-- 用最新稳定版,按需调整 --> <executions> <!-- 后编译织入:在Java编译完成后执行 --> <execution> <phase>process-classes</phase> <goals> <goal>weave</goal> </goals> <configuration> <!-- 指定织入已编译好的class文件目录 --> <weaveDirectories> <weaveDirectory>${project.build.directory}/classes</weaveDirectory> </weaveDirectories> <!-- 兼容Lombok:指向Lombok生成的源文件目录 --> <sourceDirectory>${project.build.directory}/generated-sources/lombok</sourceDirectory> <targetDirectory>${project.build.directory}/classes</targetDirectory> <!-- Java版本和项目保持一致,这里以11为例 --> <complianceLevel>11</complianceLevel> <source>11</source> <target>11</target> </configuration> </execution> <!-- 可选:保留编译阶段的AJC执行,做AspectJ语法检查 --> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> <dependencies> <!-- AspectJ工具包版本要和插件兼容 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>1.9.7</version> </dependency> </dependencies> </plugin> <!-- Lombok插件:必须在AspectJ之前执行,生成代码 --> <plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>1.18.24.0</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>delombok</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
2. 加个IntelliJ专属配置(可选但省心)
在pom.xml的properties里加这两行,明确告诉IDE开启后编译织入:
<properties> <idea.aspectj.postCompileWeave>true</idea.aspectj.postCompileWeave> <!-- 让Lombok生成的代码被AspectJ正常识别 --> <lombok.addLombokGeneratedAnnotation>true</lombok.addLombokGeneratedAnnotation> </properties>
3. 验证是否生效
改完之后:
- 先跑
mvn clean install确认项目能正常构建 - 在IntelliJ里右键项目 → Maven → Reload Project,重新导入
- 打开模块设置(File → Project Structure → Modules → 对应模块 → Facets → AspectJ),看「post compile weave mode」是不是已经自动勾上了
关键点说明
- 把AspectJ插件的执行阶段改成
process-classes是核心——这对应IntelliJ的后编译织入模式,IDE会读取这个配置自动勾选复选框。 - Lombok插件必须在AspectJ之前执行(
generate-sources阶段),不然AspectJ处理的是没生成Lombok代码的源文件,会报错。 - 插件版本要匹配:
aspectj-maven-plugin和aspectjtools、aspectjrt的版本要兼容,别乱搭版本。
内容的提问来源于stack exchange,提问作者Adrian Herscu
相关产品推荐
相关产品推荐

