【问题标题】:Aspect Maven Plugin 'overriding' already enhanced Datanucleus classesAspect Maven 插件“覆盖”已经增强的 Datanucleus 类
【发布时间】:2013-03-26 04:08:12
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-22
      • 2012-07-22
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 2013-12-28
      相关资源
      最近更新 更多