首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用AspectJ + Lombok + Maven + IntelliJ?

如何使用AspectJ + Lombok + Maven + IntelliJ?
EN

Stack Overflow用户
提问于 2022-08-02 06:53:52
回答 1查看 139关注 0票数 2
代码语言:javascript
运行
复制
<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是一个编译时的预处理器。因此,为了在编译代码后进行编织,必须执行以下操作。

在插件中:

代码语言:javascript
运行
复制
<forceAjcCompile>true</forceAjcCompile> и <sources/>

您还需要关闭Intellij中的自动构建。并执行以下命令:

代码语言:javascript
运行
复制
mvn clean compile install -Pdev

只有通过这个命令,必要的编织才会开始!因为“安装”命令。

请告诉我,为什么织布的发生要归功于这个命令?或者其他命令选项是可能的,例如,这样测试就不会被拉出来,等等?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 07:56:33

您还需要关闭Intellij中的自动构建。并执行以下命令:

干净编译安装-Pdev

从AspectJ的角度来看,上面的语句是不正确的。有三种(如果不注意Spring API)模式可以使用AspectJ:

当我们需要编译JVM文件或使用inter-type declarations

  • post-compile <sources/>

  • load时,我们使用javac编译源代码,在此之后使用ajc进程生成类,这是因为您指定了JVM时间编织,需要在JVM参数中指定native aspectJ (.aj) syntax或具有专门的类加载器

maven lifecycle的角度来看,在编译后编织的情况下,一切都应该正常工作,但是IDE通常不会在#main@Test方法附近按绿色箭头时触发#main,而不是IDE尝试分析项目对象模型(pom),并对目标类路径和依赖项做出一些假设。不幸的是,IDE并不支持所有的maven插件,这也是为什么有时某些东西不能按预期工作的主要原因(例如,IntelliJ不支持OpenAPIAxis2这样的代码生成器,这就是为什么我们将这些内容放在单独的maven模块/项目中并运行mvn install)。您的mvn ... install的目的似乎是将正确的jar放置到.m2/repository中,并给IDE一个捡起该jar的机会。

UPD。一些解释..。

当我们需要运行单独的单元测试时,让我们考虑一个案例,从maven的角度来看,这可能是这样的:

代码语言:javascript
运行
复制
mvn -am clean test -Dtest=TestClass#testMethod*

maven将在没有遇到任何困难的情况下启动它,因为在test步骤之前,它将启动compiletest-compile步骤,javacajc完成所需的工作。不幸的是,从开发人员的角度来看,上面提到的maven命令“需要很长时间”,这就是为什么IDE试图通过编译更改的类来优化进程的原因,不幸的是,如果IDE不支持AspectJ (例如,IntelliJ CE不支持)或不识别maven配置,那么它就没有机会产生预期的输出。

您的情况更加复杂,因为您使用的是lombok,它与ajc不兼容(反之亦然),因此要生成正确的类,首先需要通过javac编译源代码,然后通过ajc输出后处理。

如果您的目标是以某种方式简化特定项目的IDE设置,我建议如下:

  • 提供了可重复的示例,描述了您在
  • 中遇到的目标和困难--尝试安装AspectJ插件(如果您不在IntelliJ CE上),似乎有一些有用的选项:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73203162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档