我有一个使用编译方面并在编译时编织它们的项目。我想添加 Lombok,但不幸的是 Lombok 不支持 AJC。由于该项目本身没有任何方面的来源,因此在使用 Javac+Lombok 编译后,我将 AspectJ Maven 插件配置为进行编译后编织。
这是 AspectJ Maven 插件的配置:
<forceAjcCompile>true</forceAjcCompile>
<sources/>
<weaveDirectory>${project.build.outputDirectory}</weaveDirectory>
Run Code Online (Sandbox Code Playgroud)
它在 Maven Compiler 插件编译后立即附加到编译阶段。这样 Lombok + Javac 将首先被调用,然后 AJC 将在 Javac 生成的类文件上执行编织。
在 javac 生成的类上执行字节码编织时是否有任何限制/缺点?
也许有更好的方法可以让 Maven+Lombok+Aspects+Idea 一起工作而不会出现问题。
这是一个最小的示例项目:https : //github.com/Psimage/aspectj-and-lombok
当我使用maven-apsectj-plugin和maven-compiler-plugin compile阶段将执行两个插件compile目标。这会导致javac首先使用 进行编译,然后使用 进行完全重新编译ajc。
这个双重编译有必要吗?看来我可以关掉maven-compiler-plugin一切,一切正常。
我正在使用“默认”配置,如用法中所述maven-compiler-plugin:
<project>
...
<dependencies>
...
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.13</version>
</dependency>
...
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11</version>
<executions>
<execution>
<goals>
<goal>compile</goal> <!-- use this goal to weave all your main classes -->
<goal>test-compile</goal> <!-- use this goal to weave all your test classes -->
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
<build>
...
</project>
Run Code Online (Sandbox Code Playgroud)