从依赖编织的 AspectJ 不适用于项目

Fig*_*Out 3 java aop aspectj maven aspect

我有一个 Java 8 Maven 项目,它定义了一个自定义注释和一个方面。在该项目本身中运行测试代码时,它会将方面应用于带注释的类。我然后打包和安装项目。

然后我将该依赖项引入到一个新项目(非 Spring)中。新项目然后没有将方面应用于它的类,尽管它确实引入了新的注释。

如何使用单个 JAR 来定义注释和方面并将其应用于我所有的 Maven 项目?

Nán*_*ete 5

您需要在 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>
Run Code Online (Sandbox Code Playgroud)

请注意,我正在关闭 ,maven-compiler-plugin因为它们往往会用 覆盖彼此的输出aspectj-maven-plugin,并且 AspectJ 编译器应该能够编译普通的 java 文件并无论如何在同一步骤中编织它们,因此使用 maven-compiler-plugin 是多余的. 如果您使用 Eclipse + AJDT,这个 Maven 配置将更好地反映您在开发时在 IDE 中发生的情况。