プロジェクトをJava 7からJava 8に移行しています。問題は、aspectj-maven-plugin
を使用したアスペクトの織り方に関連しています。
Haus documentation に従って、Java 6および7で実行されるこのプラグインを使用してウィービングを正常に構成できました。しかし、問題は、Java 8をサポートするプラグインバージョン7を使用(および検索)する方法が見つからないことです。 here そのプラグイン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のウィーバーを実行する方法を知っていますか?
多くの頭痛とこれに苦労する多くの時間の後、幸いなことに私はこの問題を解決できました。これが私がしたことです:
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 jarは次のとおりです。
<!-- 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>
私が苦労した最も重要なことは、これらのjar/pomファイルがまだMavenリポジトリにないため、アスペクトj-maven-plugin 1.7 jarを手動でインストールする必要があることでした。
更新:したがって、jarファイルは Haus Jira リンクからダウンロードできます(添付セクションをご覧ください)。 Hausが利用できなくなった場合は、githubからダウンロードできます。
https://github.com/fedepia/aspectj-maven-plugin-1.7
ダウンロードしてローカルリポジトリにコピーした後、ディレクトリ内にownaspectj-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
{
...
これは、公式プラグインリリースに関する回答の更新です。 AspectJでJava 8を使用するには、公式の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>