[英]AspectJ with Maven (still) not working
我正在尝试使用Eclipse Neon中的aspectj
创建一个示例maven
项目。 但是,方面不是编织/工作(参见下面的输出)。 我尝试了很多原因和解决方案,但都没有成功(参见下面的相关问题)。 任何帮助/见解将非常感谢。 谢谢!
使用的技术 :
jdk-1.8
junit-4.5
(通过maven包含) aspectjrt-1.8.9
(通过maven包含) (我还为我的Eclipse安装安装了AJDT插件以用于单独的项目 - 不确定这是否会aspectj
的maven存储库版本)
目录 :
$ tree .
.
├── pom.xml
└── src
├── main
| └── java
| └── com
| └── hellomaven
| └── quickstart
| ├── App.java
| └── AppAspect.java
└── test
└── java
└── com
└── hellomaven
└── quickstart
└── AppTest.java
App.java
package com.hellomaven.quickstart;
public class App {
public static void main(String[] args) {
System.out.println("Hello World!");
say("billy", "Nice to meet you");
Dog d = new Dog();
d.bark(2);
}
public static void say(String name, String word) {
System.out.println(name.toUpperCase() + " says " + word.toLowerCase() + "!");
}
}
class Dog {
Dog() {
System.out.println("..Dog init code..");
}
public void bark(int n) {
for (int i = 0; i < n; i++) {
System.out.print("bark ");
}
System.out.println("!");
}
}
AppAspect.java
package com.hellomaven.quickstart;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class AppAspect {
@Before("execution(public static * *(..))")
public void testAspectBefore() {
System.out.println("Before Okay");
}
@Pointcut("execution(* *(..))")
public void testAspectPointcut() {
System.out.println("Pointcut Okay");
}
@After("execution(* *(..))")
public void testAspectAfter() {
System.out.println("After Okay");
}
@Around("execution(* *(..))")
public void testAspectAround() {
System.out.println("Around Okay");
}
}
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hellomaven</groupId>
<artifactId>quickstart</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>quickstart</name>
<url>http://maven.apache.org</url>
<properties>
<java.version>1.8</java.version>
<aspectj.version>1.8.9</aspectj.version>
<junit.version>4.5</junit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<!-- IMPORTANT -->
<useIncrementalCompilation>false</useIncrementalCompilation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.9</version>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
<source>${java.version}</source>
<target>${java.version}</target>
<Xlint>ignore</Xlint>
<complianceLevel>${java.version}</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<mainClass>com.hellomaven.quickstart</mainClass>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</project>
产量
<!-- language: lang-none -->
Hello World!
BILLY says nice to meet you!
..Dog init code..
bark bark !
相关问题我尝试过但都失败了 :
我不确定为什么,但在包括aspectjweaver-1.8.9
依赖,更新到junit-4.12
和更改方面代码后,代码工作正常。 这是更新的方面代码( AppAspect.java
):
package com.hellomaven.quickstart;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class AppAspect {
@Pointcut("execution(* *(..))")
public void defineEntryPoint() {
}
@Before("defineEntryPoint()")
public void aaa(JoinPoint joinPoint) {
System.out.println("aspect before");
}
@After("defineEntryPoint()")
public void bbb(JoinPoint joinPoint) {
System.out.println("aspect after");
}
}
这是新的dependencies
:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
奇怪的。 我使用的是java 1.8.0_120,aspectj-maven-plugin 1.11,aspectjrt 1.9.2
使用mvn 3.0.5它正常工作每个mvn以上(3.3.9 oder 3.6.0)都不起作用。 对我来说,它看起来像一个maven问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.