[SPRING] Spring + AspectJ는 aspectj-maven-plugin을 사용하여 자바 8을 위빙한다.
SPRINGSpring + AspectJ는 aspectj-maven-plugin을 사용하여 자바 8을 위빙한다.
내 프로젝트를 Java 7에서 Java 8로 마이그레이션하고 있는데 aspectj-maven-plugin을 사용하여 aspectj와 관련된 문제가 발생했습니다.
Haus 설명서에 따라 Java 6 및 7에서 실행되는이 플러그인을 사용하여 위빙을 성공적으로 구성 할 수있었습니다. 그러나 문제는 내가 자바 8을 지원하는 플러그인 버전 7을 사용하는 방법을 찾지 못했다는 것이다. 플러그인 7이 자바 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에 대한 위버를 실행하는 방법을 알고 있습니까?
해결법
-
==============================
1.다행스럽게도 나는이 문제를 해결할 수 있었다. 여기 내가 한 일이있다.
다행스럽게도 나는이 문제를 해결할 수 있었다. 여기 내가 한 일이있다.
Java 8에서 aspectj-maven-plugin을 사용하려면 aspectj-maven-plugin 버전을 구성 할 수 있습니다 (Java 7에서는 aspectj-maven-plugin 1.6이 작동 함).
따라서, 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 항아리가 있습니다 :
<!-- 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 파일이 아직 메이븐 레포에 없기 때문에 수동으로해야했다.
업데이트 : Jar 파일은 Haus Jira 링크에서 다운로드 할 수 있습니다 (첨부 파일 섹션 참조). 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>
내 자바 측면 들어 :
@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 plugin은이 링크에서 찾을 수 있습니다 :
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>
from https://stackoverflow.com/questions/25209339/spring-aspectj-weaving-for-java-8-using-aspectj-maven-plugin by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 배치에서 멀티 스레딩을 설정하는 방법은 무엇입니까? (0) | 2018.12.25 |
---|---|
[SPRING] Spring MVC 요청 메소드 'GET'이 지원되지 않는 이유는 무엇입니까? (0) | 2018.12.25 |
[SPRING] Java에서 Spring 애플리케이션을 시작하는 예외 (0) | 2018.12.25 |
[SPRING] Spring에서 인스턴스화 된 빈 목록을 얻으려면 어떻게해야합니까? (0) | 2018.12.25 |
[SPRING] 런타임시 스프링의 @Scheduled fixedDelay를 변경하는 방법 (0) | 2018.12.25 |