我正在将我的项目从Java 7迁移到Java 8,而我遇到的问题与使用进行AspectJ编织有关aspectj-maven-plugin。
aspectj-maven-plugin
根据Haus文档,我可以使用在Java 6和7上运行的此插件成功配置编织。但是问题是我还没有找到使用(和找到)支持Java 8的插件版本7的任何方法。我在这里看到插件7添加了Java 8支持,但是找不到使用它的方法。
这是我需要的配置插件:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.7</version> <!-- AspectJ weaver plugin 7 is for java 8 (version 1.6 is for java 7) --> <configuration> <complianceLevel>1.8</complianceLevel> <source>1.8</source> <target>1.8</target> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions> </plugin>
我确认使用1.6版的上述代码对于Java 7可以正常工作,但是尝试使用1.7版没有运气。
你知道如何在Java 8上为spring + aspectj运行weaver吗?
这是我所做的:
要aspectj-maven-plugin与Java 8一起使用,我可以配置Aspectj-maven-plugin 1.7版本(请注意,aspectj-maven-plugin 1.6适用于Java 7)。
因此,Maven插件配置需要为:
<!-- AspectJ configuration --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.7-SNAPSHOT</version> <configuration> <complianceLevel>1.8</complianceLevel> <source>1.8</source> <target>1.8</target> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions> </plugin>
顺便说一句,需要的AspectJ jars是:
<!-- Spring AOP + AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.0.4.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.1</version> </dependency>
我一直在努力的最重要的事情是安装AspectJ-Maven-plugin 1.7 jar,因为这些jar / pom文件尚未在maven存储库中,所以我必须手动进行安装。
更新:因此,可以从Haus Jira链接下载jar文件(请参见附件部分)。如果Haus不再可用,则可以从我的github下载:
https://github.com/fedepia/aspectj-maven-plugin-1.7
下载并复制到我的本地仓库后,我需要在目录中创建自己的 aspectj-maven-plugin-1.7-SNAPSHOT.pom文件:
.m2\repository\org\codehaus\mojo\aspectj-maven-plugin\1.7-SNAPSHOT\aspectj-maven-plugin-1.7-SNAPSHOT.pom
我基于1.6版的副本,但不得不修改以下内容:
<version>1.7-SNAPSHOT</version> <properties> <aspectjVersion>1.8.1</aspectjVersion> <mavenVersion>2.2.1</mavenVersion> <changesPluginVersion>2.9</changesPluginVersion> </properties>
这就是你要做的所有事情,希望对你有所帮助。
更新:(添加更多详细信息,如Xtreme Biker在评论中所述)
在我的上下文配置中,我有:
<aop:aspectj-autoproxy /> <bean id="notificationAspect" class="com.integration.core.aspect.NotificationAspect" factory-method="aspectOf" scope="singleton"></bean>
对于我的Java方面,我使用:
@Aspect public class NotificationAspect { ... @AfterThrowing(pointcut="@annotation(com.integration.core.meta.NotifyOnFailure)", throwing="ex") public void executeOnException(JoinPoint joinPoint, ExternalApiExecutionException ex) throws Throwable { ...
官方插件
这是官方插件版本的答案的更新。为了将Java 8与AspectJ一起使用,可以在以下链接上找到官方的AspectJ Maven插件:
http://www.mojohaus.org/aspectj-maven-plugin/usage.html
这是Maven信息库的链接:
http://mvnrepository.com/artifact/org.codehaus.mojo/aspectj-maven-plugin/1.8
如文档所述,使用它的代码是:
<project> ... <dependencies> ... <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.7</version> </dependency> ... </dependencies> ... <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.8</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>