0

私は、appengine-maven-plugin によって行われる datanucleus 拡張機能と一緒に、aspectj-maven-plugin を使用しています。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 は、クラスファイルで動作する唯一のバイトコード トランスフォーマーであると想定します。したがって、織り込む前に、常に元の (変換されたクラス ファイルではない) に戻ります。datanucleus のようなものがある場合、この仮定は成り立たなくなります。オーバーウィービングは、すでに織り込まれたクラスの上に織り込むオプションです。

詳細はこちら: http://andrewclement.blogspot.ca/2010/05/aspectj-overweaving.html

-Xset:overWeaving=true有効にするには、オプションを使用して有効にします。ただし、ブログ投稿の下のコメントを見ると、maven が-Xset:オプションを好まないことがわかります。そのため、.lst ファイルを使用し、代わりに -X オプションを追加することをお勧めします。

これでうまくいかない場合は、aspectj-users メーリング リストにメールを送信することをお勧めします。

于 2013-04-05T19:04:36.943 に答える