AspectJ在Maven项目中,不工作/编织

我正在尝试让AspectJ编织在一个简单的Maven项目中工作,并且不确定它出错的地方:当我使用“mvn exec:java”运行代码时,我看不到预期的输出。

我确信代码正常工作,因为我在STS中尝试了相同的工作,它工作正常。 我只是想让AspectJ在Maven项目中工作。

任何有关如何调试此类问题的提示将不胜感激。

 4.0.0 com.aop aop1 0.0.1-SNAPSHOT jar aop1 http://maven.apache.org  UTF-8    junit junit 3.8.1 test   org.aspectj aspectjrt 1.7.3        org.codehaus.mojo aspectj-maven-plugin    compile   1.7 1.7     true    org.codehaus.mojo exec-maven-plugin 1.1  com.aop.aop1.App      

Aspect文件与代码位于同一文件夹中:

  package com.aop.aop1; public aspect aspect { pointcut secureAccess() : execution(* *.foo(..)); before() : secureAccess() { System.out.println("BEHOLD the power of AOP !!!"); } } 

Java文件:

 package com.aop.aop1; public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); foo(); } public static void foo() { System.out.println(" IN FOO."); } } 

您的配置存在一些问题:

  • 该方面应命名为Aspect ,其大写Aspect为“A”,而不是aspect为保留关键字。
  • POM缺少结束标记。
  • POM有一个部分,但没有单独的部分,即你为插件提供默认值,但实际上并没有声明你想要使用它们。 因此,要么使用不带的独立部分,要么在其他部分重新声明插件。
  • aspectj-maven-plugin需要 。 你忘了指定一个。
  • aspectj-maven-plugin还需要配置。
  • 您使用编译时编织,因此您不需要设置。 它只需要加载时间编织。
  • aspectjrt依赖项至少需要1.7.4版本才能与aspectj-maven-plugin 1.6中使用的版本兼容,以便编译源代码。

除此之外,我建议使用较新版本的Maven插件和依赖项,如JUnitexec-maven-plugin,如果你没有任何令人信服的理由使用旧的。 我还建议使用最新的AspectJ版本1.8.2,并指定在aspectj-maven-plugin内部使用它。

使用最少的更改来处理pom.xml

  4.0.0 com.aop aop1 0.0.1-SNAPSHOT jar aop1 http://maven.apache.org  UTF-8    junit junit 3.8.1 test   org.aspectj aspectjrt 1.7.4      org.codehaus.mojo aspectj-maven-plugin 1.6  1.7     compile   1.7 1.7      org.codehaus.mojo exec-maven-plugin 1.1  com.aop.aop1.App      

使用推荐的更改来处理pom.xml

  4.0.0 com.aop aop1 0.0.1-SNAPSHOT AOP Sample  UTF-8 1.8.2 1.7     maven-compiler-plugin 3.1  ${java.source-target.version} ${java.source-target.version}  false    org.codehaus.mojo aspectj-maven-plugin 1.6  true ${java.source-target.version} ${java.source-target.version} ignore ${java.source-target.version} UTF-8 true     process-sources  compile test-compile      org.aspectj aspectjtools ${aspectj.version}     org.codehaus.mojo exec-maven-plugin 1.3  com.aop.aop1.App    org.dstovall onejar-maven-plugin 1.4.4    0.96 com.aop.aop1.App true   one-jar         OneJAR googlecode.com http://onejar-maven-plugin.googlecode.com/svn/mavenrepo     org.aspectj aspectjrt ${aspectj.version}    junit junit 4.11 test    

顺便说一句, onejar-maven-plugin只是一个好东西,我喜欢用它来构建一个独立的超级JAR(又名胖JAR),其中包含运行软件所需的一切,即你的类/方面加上AspectJ运行时。 你可以用它来运行程序

 java -jar aop1-0.0.1-SNAPSHOT.one-jar.jar 

输出应该类似于mvn exec:java只是没有Maven的东西:

 Hello World! BEHOLD the power of AOP !!! IN FOO.