我正在使用aspectj-maven-plugin以及appengine-maven-plugin完成的datanucleus增强。 如果我在appengine-maven-plugin之前定义了aspectj-maven-plugin,那么Everythings似乎没问题,但是当我在aspectj-maven-plugin之前定义appengine-maven-plugin时,aspectj-maven-plugin似乎会覆盖类增强由appengine-maven-plugin完成。
当然我可以在appengine-maven-plugin之前定义aspectj-maven-plugin,但我想知道是否有更好的方法来解决这个问题?
这是我的配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<outxml>true</outxml>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${org.aspectj.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>${com.google.appengine.version}</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
答案 0 :(得分:2)
您需要使用 overweaving 才能使其正常运行。通常,AspectJ假定它是在类文件上运行的唯一字节码转换器。因此,在编织之前,它将始终返回到原始(未转换的类文件)。当你有像datanucleus这样的东西时,这种假设就不再适用了。过度编织是一种编织已经编织过的类的选择。
此处有更多详情:http://andrewclement.blogspot.ca/2010/05/aspectj-overweaving.html
要启用,请使用-Xset:overWeaving=true
选项启用它。但是,看看博客文章下面的评论,我可以看到maven不喜欢-Xset:
选项。因此,建议使用.lst文件并将-X选项添加到该文件中。
如果这不起作用,我建议通过电子邮件发送aspectj-users邮件列表。