倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Aspectj -- 設定可能なパラメータ 其ノ弐 ライブラリと weaving

今回は、Aspect が関連するライブラリの取り扱い方を見ていきます。 

以下の説明で使う例を定義しておきます(下図参照):

  • [MyProject]・・・現在開発中のプロジェクト
  • [Library A]・・・Java クラスを含む(通常の)外部ライブラリ
  • [Library B]・・・ Aspect を含む外部ライブラリ

f:id:waman:20071118055259p:image

<weaveDependency>


説明

<weaveDependency> には、[MyProject] で作成したアスペクトの weaving 対象となる Maven2 プロジェクト([Ligrary A])を指定します。 [MyProject] 内(もしくはその成果物を使うプロジェクト)で [Library A] 内のクラスを使用する場合、[MyProject] 内で作成されたアスペクトを「織り込まれた」クラスを使用することになります。

ajc では

AspectJ compiler & weaver*1 である「ajc」では、-inpath オプションと同じ役割をします。

使用方法

POM ファイルの設定は以下の2箇所です:

  • ライブラリへの依存性の追加
  • <weaveDependency> 要素の追加

「aspectjrt」への依存性も忘れずに。

<project>
  ...
  <dependencies>
    <!-- aspectjrt への依存性 -->
    ...
    <!-- ここを追加 -->
    <dependency>
      <groupId>org.lib</groupId>
      <artifactId>LibraryA</artifactId>
      <version>1.0</version>
    </dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <configuration>
          <!-- ここを追加 -->
          <weaveDependencies>
            <weaveDependency>
              <groupId>org.lib</groupId>
              <artifactId>LibraryA</artifactId>
            </weaveDependency>
          </weaveDependencies>
        </configuration>
        <executions>
          <execution><goals><goal>compile</goal></goals></execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

<aspectLibrary>


説明

<aspectLibrary> には、[MyProject] のクラスに「織り込みたい」アスペクトを含んだ Maven2 プロジェクト([Library B])にを指定します。

ajc では

ajc」では、-aspectpath オプションと同じ役割をします。

使用方法

POM ファイルの設定は、<weaveDependency> 要素の場合とほとんど同じで、以下の2箇所です:

  • ライブラリへの依存性の追加
  • <aspectLibrary> 要素の追加

こちらも「aspectjrt」への依存性も忘れずに。

<project>
  ...
  <dependencies>
    <!-- aspectjrt への依存性 -->
    ...
    <!-- ここを追加 -->
    <dependency>
      <groupId>org.lib</groupId>
      <artifactId>LibraryB</artifactId>
      <version>1.0</version>
    </dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <configuration>
          <!-- ここを追加 -->
          <aspectLibraries>
            <aspectLibrary>
              <groupId>org.lib</groupId>
              <artifactId>LibraryB</artifactId>
            </aspectLibrary>
          </aspectLibraries>
        </configuration>
        <executions>
          <execution><goals><goal>compile</goal></goals></execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

*1:Java でいう javac ツール。