0

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

1 回答 1

2

您将需要使用过度编织才能使其正常工作。通常,AspectJ 假定它是唯一在类文件上运行的字节码转换器。所以,在它编织之前,它总是会回到原来的(不是转换的类文件)。当你有像数据核这样的东西在起作用时,这个假设就不再成立了。Overweaving 是一种在已经编织的类上编织的选项。

更多细节在这里:http ://andrewclement.blogspot.ca/2010/05/aspectj-overweaving.html

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

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

于 2013-04-05T19:04:36.943 回答