我使用了aspectj-maven-plugin和由appengine-maven-plugin完成的datanucleus增强。如果我在appengine-maven-plugin之前定义了aspectj-maven-plugin,一切似乎都没问题,但是当我在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>发布于 2013-04-06 03:04:37
您将需要使用覆盖以使其正常工作。通常,AspectJ假定它是在类文件上运行的唯一字节码转换器。因此,在编织之前,它总是会返回到原始文件(不是转换后的类文件)。当你有像datanucleus这样的东西在发挥作用时,这个假设就不再成立。覆盖编织是在已经编织的类上编织的一个选项。
更多详细信息请访问:http://andrewclement.blogspot.ca/2010/05/aspectj-overweaving.html
要启用它,请使用-Xset:overWeaving=true选项来启用它。然而,看看博文下面的评论,我可以看到maven不喜欢-Xset:选项。因此,建议使用.lst文件,并在其中添加-X选项。
如果这不起作用,我建议通过电子邮件发送给aspectj用户的邮件列表。
https://stackoverflow.com/questions/15805193
复制相似问题