我有一个项目,它不是spring应用程序。我正在尝试在其中使用AspectJ注释。 Annotation类是从我拥有的另一个jar中引用的。我在下面提到了POM的插件部分。我的构建成功了,但是Maven的控制台输出从不提及任何有关AspectJ插件的信息,并且在我运行项目时注释不起作用。
几个小时以来,我一直在试图找出问题所在,但无法弄清。
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<complianceLevel>1.8</complianceLevel>
<showWeaveInfo>true</showWeaveInfo>
<aspectLibraries>
<aspectLibrary>
<groupId>it.cvc.ciscocommerce.lps.lp-commons</groupId>
<artifactId>lp-commons</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>listpriceservice</warName>
</configuration>
</plugin>
<!-- Plugin for sdaas deployment. For compressing war to tar.gz -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/resources/assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
这些是Jar中定义的两个依赖关系,我正尝试将它们用作方面库。
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.7.4</version>
</dependency>
这个jar编译良好,我想使用它来开发另一个SPRING应用程序,但不能使用这个应用程序。在SPRING应用程序中,我什至没有定义maven方面插件。
当我运行Maven构建时,在控制台中,我只列出了以下插件。
[DEBUG]目标:org.apache.maven.plugins:maven-clean-plugin:2.5:clean(默认为clean) [DEBUG]样式:常规
[DEBUG]目标:org.apache.maven.plugins:maven-compiler-plugin:3.1:compile(默认编译) [DEBUG]样式:常规
[DEBUG]目标:org.apache.maven.plugins:maven-resources-plugin:2.6:testResources(默认为testResources) [DEBUG]样式:常规
[DEBUG]目标:org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile(默认为testCompile) [DEBUG]样式:常规
[DEBUG]目标:org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test(默认测试) [DEBUG]样式:常规
[DEBUG]目标:org.apache.maven.plugins:maven-war-plugin:2.4:war(默认为war) [DEBUG]样式:常规
编辑:阅读kriegaex的答案以及关于pluginManagement vs插件的信息后,我如下更改了POM。请注意,我的项目不是多模块的,它只有一个POM。
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<complianceLevel>1.8</complianceLevel>
<showWeaveInfo>true</showWeaveInfo>
<aspectLibraries>
<aspectLibrary>
<groupId>it.cvc.ciscocommerce.lps.lp-commons</groupId>
<artifactId>lp-commons</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>listpriceservice</warName>
</configuration>
</plugin>
<!-- Plugin for sdaas deployment. For compressing war to tar.gz -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/resources/assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
执行此操作时,在AspectJ执行下的执行标签上出现以下错误
生命周期配置未涵盖插件执行:org.codehaus.mojo:aspectj-maven-plugin:1.4:compile(执行:默认,阶段:进程源)
更新我正在解决此问题,因为我原来未调用AspectJ插件的问题已解决。我将在其他问题上打开一个新问题。感谢kriegaex为我指明了正确的方向。
答案 0 :(得分:0)
我认为这是一个经典的问题,完全没有AspectJ问题,只是使用Maven的初学者的错误:
您已经在<pluginManagement>
部分中定义了插件的默认设置,但是稍后在单独的<plugins>
部分中忘记了对它们的引用。因此,Maven根本不知道您要使用它们。
更新:
好的,我会详细说明一下,因为您似乎仍然无法理解如何使用<pluginManagement>
和<plugins>
:您可以使用前者来定义版本,范围和默认设置您的插件。然后,您可以使用后者以便轻松地在您需要的(可能是多模块)项目的任何模块中引用预定义(托管)插件,而无需复制/粘贴相同的版本和配置。因此,它不是“使用这个或那个”,而是“同时使用它们并以一种聪明的方式将它们组合在一起”。示例:
<pluginManagement>
<plugins>
<plugin>
<groupId>my.group.id</groupId>
<artifactId>my-plugin-name</artifactId>
<version>1.2.3</version>
<configuration>
<something>foo</something>
</configuration>
</plugin>
<plugin>
<groupId>my.group.id</groupId>
<artifactId>my-other-plugin-name</artifactId>
<version>4.5</version>
<scope>test</scope>
<configuration>
<blah>xyz</blah>
</configuration>
</plugin>
</plugins>
</pluginManagement>
然后在同一个模块中,或在另一个模块中,将前一个模块作为父模块或将其导入为物料清单(物料清单):
<plugins>
<plugin>
<groupId>my.group.id</groupId>
<artifactId>my-plugin-name</artifactId>
</plugin>
<plugin>
<groupId>my.group.id</groupId>
<artifactId>my-other-plugin-name</artifactId>
</plugin>
</plugins>
看到了吗?非常干净和简单。
顺便说一下,这类似于<dependencyManagement>
和<dependencies>
之间的区别。
您还可以在<plugins>
部分中扩展或覆盖托管插件的配置,因此您不仅限于预先配置的内容。
关于为什么某些托管插件没有在<plugins>
部分中明确提及的情况下起作用的原因:它们是在父POM或Maven根POM中配置的,例如依赖项插件,编译插件和其他预定义的插件和预配置的Maven基本插件。如果使Maven显示模块的有效POM,则会看到它们。
AspectJ Maven插件当然不是Maven基本插件,因此您必须自己配置,这是您要尝试做的事情。