3

mavenを使用してEclipseでアスペクトプロジェクトを構築する際に問題に直面しています。Eclipse で Maven を実行すると、"Run As > Maven build" というメッセージが表示されます: <...>/Clazz.java:[5,32] エラー: シンボルが見つかりません。したがって、aspectj は maven を介してコードを織り込んでいないようです。

次のように、クラスと、言及されたクラスでインタータイプ属性を定義するアスペクトが得られるまで、問題を抽出しました。

public class Clazz {
    public static void main(String[] args) {
        System.out.println(new Clazz().string);
    }
}

public aspect Aspect {

    public String Clazz.string = "string";

}

pom.xml は次のようになります。

  <dependencies>
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.7.3</version>
</dependency>

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
4

2 に答える 2

5

実際には、Maven Compiler Plugin を非アクティブ化する必要はありませんが、ここで同様の問題を抱えている人のために私が見つけたことに従って、2 つのことを行う必要があります。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <aspectj.version>1.8.1</aspectj.version>
</properties>

<!-- (...) -->

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <!-- IMPORTANT -->
        <useIncrementalCompilation>false</useIncrementalCompilation>
    </configuration>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.6</version>
    <configuration>
        <showWeaveInfo>true</showWeaveInfo>
        <source>1.7</source>
        <target>1.7</target>
        <Xlint>ignore</Xlint>
        <complianceLevel>1.7</complianceLevel>
        <encoding>UTF-8</encoding>
        <verbose>true</verbose>
    </configuration>
    <executions>
        <execution>
            <!-- IMPORTANT -->
            <phase>process-sources</phase>
            <goals>
                <goal>compile</goal>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjtools</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
    </dependencies>
</plugin>

つまり、する必要があります

  • Maven Compiler Plugin 3.1 でインクリメンタル コンパイルを使用します (注意、スイッチが逆になっています。これはおそらくバグです)。
  • 実行フェーズ「プロセスソース」を AspectJ Maven Plugin 1.6 に割り当てます。

それはそれを行う必要があります。

于 2014-07-23T10:50:38.583 に答える