Aspect Maven插件'覆盖'已经增强的Datanucleus类

时间:2013-04-04 07:38:41

标签: google-app-engine maven maven-3 aspectj datanucleus

我正在使用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>

1 个答案:

答案 0 :(得分:2)

您需要使用 overweaving 才能使其正常运行。通常,AspectJ假定它是在类文件上运行的唯一字节码转换器。因此,在编织之前,它将始终返回到原始(未转换的类文件)。当你有像datanucleus这样的东西时,这种假设就不再适用了。过度编织是一种编织已经编织过的类的选择。

此处有更多详情:http://andrewclement.blogspot.ca/2010/05/aspectj-overweaving.html

要启用,请使用-Xset:overWeaving=true选项启用它。但是,看看博客文章下面的评论,我可以看到maven不喜欢-Xset:选项。因此,建议使用.lst文件并将-X选项添加到该文件中。

如果这不起作用,我建议通过电子邮件发送aspectj-users邮件列表。