使用 maven-compiler-plugin 和 aspectj-maven-plugin 编译
Compiling with maven-compiler-plugin and aspectj-maven-plugin
当我使用 maven-apsectj-plugin
和 maven-compiler-plugin
compile
阶段将执行两个插件 compile
目标。
这导致首先使用 javac
进行编译,然后使用 ajc
.
进行完全重新编译
这个双编译有必要吗?看来我可以关闭 maven-compiler-plugin
,一切正常。
我正在使用 "default" 配置,如 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>
是的,您可以停用 Maven 编译器插件,因为 AspectJ 编译器是 Eclipse Java 编译器的定期更新分支。因此,它也可以编译你的Java个文件。
但如果情况更复杂,例如您使用 Maven 编译器还编译 Groovy 文件或其他模块中的文件,并且只想在 <pluginManagement>
中配置它一次,也许停用它不是一个很好的选择。有一种方法可以让两个插件一起玩得很好,看我的其他答案
基本上,您将 Maven 编译器配置为使用 <useIncrementalCompilation>false</useIncrementalCompilation>
,将 AspectJ Maven 配置为使用 <phase>process-sources</phase>
。更多信息在链接的答案中。
然后你会看到这样的输出:
[INFO] --- aspectj-maven-plugin:1.12.1:compile (default) @ openbook_cleaner ---
[INFO] Showing AJC message detail for messages of types: [error, warning, fail]
[INFO]
[INFO] --- aspectj-maven-plugin:1.12.1:test-compile (default) @ openbook_cleaner ---
[WARNING] No sources found skipping aspectJ compile
[INFO]
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ openbook_cleaner ---
[INFO] Nothing to compile - all classes are up to date
当我使用 maven-apsectj-plugin
和 maven-compiler-plugin
compile
阶段将执行两个插件 compile
目标。
这导致首先使用 javac
进行编译,然后使用 ajc
.
这个双编译有必要吗?看来我可以关闭 maven-compiler-plugin
,一切正常。
我正在使用 "default" 配置,如 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>
是的,您可以停用 Maven 编译器插件,因为 AspectJ 编译器是 Eclipse Java 编译器的定期更新分支。因此,它也可以编译你的Java个文件。
但如果情况更复杂,例如您使用 Maven 编译器还编译 Groovy 文件或其他模块中的文件,并且只想在 <pluginManagement>
中配置它一次,也许停用它不是一个很好的选择。有一种方法可以让两个插件一起玩得很好,看我的其他答案
基本上,您将 Maven 编译器配置为使用 <useIncrementalCompilation>false</useIncrementalCompilation>
,将 AspectJ Maven 配置为使用 <phase>process-sources</phase>
。更多信息在链接的答案中。
然后你会看到这样的输出:
[INFO] --- aspectj-maven-plugin:1.12.1:compile (default) @ openbook_cleaner ---
[INFO] Showing AJC message detail for messages of types: [error, warning, fail]
[INFO]
[INFO] --- aspectj-maven-plugin:1.12.1:test-compile (default) @ openbook_cleaner ---
[WARNING] No sources found skipping aspectJ compile
[INFO]
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ openbook_cleaner ---
[INFO] Nothing to compile - all classes are up to date