我正在将项目从Java 7迁移到Java 8,而我遇到的问题与使用进行AspectJ编织有关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>
上下文2。XML 这会导致将抽象类的transactionManager属性设置为服务器启动期间创建的最后一个注释事务方面bean'org.springframework.transaction.interceptor.TransactionAspectSupport。 因此,如果实例化的最后一个bean是dataSource1,则在dataSource1上创建事务,否则在DataSource2上
我有一个项目,它使用编译的方面并在编译时编织它们。我想添加Lombok,但不幸的是,Lombok不支持AJC。由于该项目本身没有任何方面的源代码,因此在使用Javac Lombok编译之后,我将AspectJ Maven插件配置为进行编译后编织。 以下是AspectJ Maven插件的配置: 它在Maven编译器插件编译后立即附加到编译阶段。这样Lombok Javac将首先被调用,然后AJC将对
AspectJ意味着它的另一个AOP实现不是基于spring的,如果我们想使用它,那么除了spring之外,我们还需要包括一些第三方JAR。 Spring AOP注释意味着Spring使用AspectJ注释来提供AOP特性。 这些假设公平吗?
问题内容: 我正在尝试使用JDK8运行Aspectj- Maven插件。但是它给出了诸如“无法解析类型java.lang.CharSequence的错误。它是从所需的.class文件中间接引用的” 有关如何解决的任何帮助,或者Aspectj-maven-plugin是否支持JDK8。我正在使用AspectJ–Maven插件的1.6版本。 问题答案: 我必须达到相同的目标,而且我疯狂地试图弄清楚这一
我正在尝试用JDK8运行aspectj-maven插件。但是它给出了一些错误,比如“无法解析java.lang.CharSequence类型。它是从必需的。class文件间接引用的” 任何有关如何解析的帮助,或者aspectj-maven-plugin是否支持JDK8。我使用的是1.6版本的AspectJ--maven-plugin。