Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
Weaving аспектов при помощи Maven2
Постоянная ссылка 23-01-2008 anydoby java

При переводе почти всех своих проектов на Maven2, столкнулся с небольшой проблемой. Как быть с AspectJ? Оказалось, для Maven2 есть неплохой плагин с хреновой документацией. Здесь предлагаю ознакомиться с тем, как пользоваться данным плагином.

Итак, к плагинам билда нужно добавить еще один:


      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

А теперь самое интересное: текущая версия плагина на момент написания этой статьи зависит от AspectJ 1.5.2b, а вы, как ни странно, пользуетесь более новой - 1.5.3. Что делать? Ничего особенного: идем в репозиторий M2 и ручками правим файл aspectj-maven-plugin-1.0-beta-2.pom, заменяя в нем все 1.5.2x на нужную нам версию AspectJ. Ругаться плагин не будет :)

А теперь настоящий живой пример вивинга, который я использую с существующими аспектами spring-aspects:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  .............
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
          <verbose>true</verbose>
          <outxml>false</outxml>
          <showWeaveInfo>true</showWeaveInfo>
          <weaveDependencies>
            <weaveDependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-aspects</artifactId>
            </weaveDependency>
          </weaveDependencies>
          <aspectLibrarys>
            <aspectLibrary>
              <groupId>org.springframework</groupId>
              <artifactId>spring-aspects</artifactId>
            </aspectLibrary>
          </aspectLibrarys>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.5.3</version>
    </dependency>
  </dependencies>
</project>

Версии аспектов можно не указывать - будут использованы те, которые определены в зависимостях проекта. После успешной компиляции в папке target/classes появится META-INF/aop.xml с аспектами спринга.

PS. Через несколько дней пользования плагином выяснилось, что работает он довольно хреново, я нашел несколько необычное решение, милости прошу на продолжение эпопеи

Добавить комментарий

Предыдущая статья Echo2 + Spring + AspectJ Следующая статья Обработка ошибок в Echo2 при помощи AspectJ