<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.10</version>
<configuration>
<verbose>true</verbose>
<showWeaveInfo>true</showWeaveInfo>
<source>1.8</source>
<target>1.8</target>
<complianceLevel>1.8</complianceLevel>
<verbose>false</verbose>
<Xlint>ignore</Xlint>
<outxml>true</outxml>
<forceAjcCompile>true</forceAjcCompile>
<reweavable>false</reweavable>
<!-- this is important: start-->
<sources/>
<weaveDirectories>
<weaveDirectory>${project.build.directory}/classes</weaveDirectory>
</weaveDirectories>
<!-- this is important: end-->
</configuration>
<executions>
<execution>
<!-- The right phase is very important! Compile and weave aspects after all classes compiled by javac -->
<phase>process-classes</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.9</version>
</dependency>
</dependencies>
</plugin>
根据标准,aspectj plugin在编译期间提供编织。但是Lombok是一个编译时的预处理器。因此,为了在编译代码后进行编织,必须执行以下操作。
在插件中:
<forceAjcCompile>true</forceAjcCompile> и <sources/>
您还需要关闭Intellij中的自动构建。并执行以下命令:
mvn clean compile install -Pdev
只有通过这个命令,必要的编织才会开始!因为“安装”命令。
请告诉我,为什么织布的发生要归功于这个命令?或者其他命令选项是可能的,例如,这样测试就不会被拉出来,等等?
发布于 2022-08-02 07:56:33
您还需要关闭Intellij中的自动构建。并执行以下命令:
干净编译安装-Pdev
从AspectJ的角度来看,上面的语句是不正确的。有三种(如果不注意Spring API
)模式可以使用AspectJ:
当我们需要编译JVM文件或使用inter-type declarations
<sources/>
javac
编译源代码,在此之后使用ajc
进程生成类,这是因为您指定了JVM时间编织,需要在JVM参数中指定native aspectJ (.aj) syntax
或具有专门的类加载器。
从maven lifecycle
的角度来看,在编译后编织的情况下,一切都应该正常工作,但是IDE通常不会在#main
或@Test
方法附近按绿色箭头时触发#main
,而不是IDE尝试分析项目对象模型(pom
),并对目标类路径和依赖项做出一些假设。不幸的是,IDE并不支持所有的maven插件,这也是为什么有时某些东西不能按预期工作的主要原因(例如,IntelliJ不支持OpenAPI
或Axis2
这样的代码生成器,这就是为什么我们将这些内容放在单独的maven模块/项目中并运行mvn install
)。您的mvn ... install
的目的似乎是将正确的jar放置到.m2/repository
中,并给IDE一个捡起该jar的机会。
UPD。一些解释..。
当我们需要运行单独的单元测试时,让我们考虑一个案例,从maven
的角度来看,这可能是这样的:
mvn -am clean test -Dtest=TestClass#testMethod*
maven
将在没有遇到任何困难的情况下启动它,因为在test
步骤之前,它将启动compile
和test-compile
步骤,javac
和ajc
完成所需的工作。不幸的是,从开发人员的角度来看,上面提到的maven命令“需要很长时间”,这就是为什么IDE试图通过编译更改的类来优化进程的原因,不幸的是,如果IDE不支持AspectJ (例如,IntelliJ CE不支持)或不识别maven配置,那么它就没有机会产生预期的输出。
您的情况更加复杂,因为您使用的是lombok
,它与ajc
不兼容(反之亦然),因此要生成正确的类,首先需要通过javac
编译源代码,然后通过ajc
输出后处理。
如果您的目标是以某种方式简化特定项目的IDE设置,我建议如下:
https://stackoverflow.com/questions/73203162
复制相似问题