AspectJ 从依赖编织不适用于项目
AspectJ weaving from dependency not applying to project
我有一个 Java 8 Maven 项目,它定义了一个自定义注释和一个方面。当 运行 测试该项目本身的代码时,它将方面应用到带注释的 类。然后我正在打包和安装项目。
然后我将该依赖项引入一个新项目(非Spring)。新项目没有应用方面 类,尽管它确实引入了新注释。
如何使用单个 JAR 来定义注释和方面并将其应用到我使用 Maven 的所有项目?
您需要在 pom.xml 的 aspectj-maven-plugin 配置中将方面项目依赖项指定为 方面库。假设您的方面模块具有 groupid:artifactid groupid:aspect-module
。您的 pom.xml
应该与此类似:
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>groupid</groupId>
<artifactId>aspect-module</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.9</version>
<configuration>
<aspectLibraries>
<aspectLibrary>
<groupId>groupid</groupId>
<artifactId>aspect-module</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
请注意,我关闭了 maven-compiler-plugin
,因为它们往往会用 aspectj-maven-plugin
覆盖彼此的输出,并且 AspectJ 编译器应该能够编译正常的 java 文件并将它们编织在同一步骤中,因此使用 maven-compiler-plugin 是多余的。如果您使用的是 Eclipse + AJDT,此 Maven 配置将更好地反映您在开发时 IDE 中发生的情况。
我有一个 Java 8 Maven 项目,它定义了一个自定义注释和一个方面。当 运行 测试该项目本身的代码时,它将方面应用到带注释的 类。然后我正在打包和安装项目。
然后我将该依赖项引入一个新项目(非Spring)。新项目没有应用方面 类,尽管它确实引入了新注释。
如何使用单个 JAR 来定义注释和方面并将其应用到我使用 Maven 的所有项目?
您需要在 pom.xml 的 aspectj-maven-plugin 配置中将方面项目依赖项指定为 方面库。假设您的方面模块具有 groupid:artifactid groupid:aspect-module
。您的 pom.xml
应该与此类似:
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>groupid</groupId>
<artifactId>aspect-module</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.9</version>
<configuration>
<aspectLibraries>
<aspectLibrary>
<groupId>groupid</groupId>
<artifactId>aspect-module</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
请注意,我关闭了 maven-compiler-plugin
,因为它们往往会用 aspectj-maven-plugin
覆盖彼此的输出,并且 AspectJ 编译器应该能够编译正常的 java 文件并将它们编织在同一步骤中,因此使用 maven-compiler-plugin 是多余的。如果您使用的是 Eclipse + AJDT,此 Maven 配置将更好地反映您在开发时 IDE 中发生的情况。