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

После написания статьи об AspectJ и Maven2 я понял, что плагин работает нехорошо. Вот такая конфигурация:


      <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>

приводит к тому, что классы аспектов из сторонних библиотек попадают в папку target/classes. То есть эти классы попадут и в ваш jar. Если затем один из ваших проектов будет использовать этот jar и ту же стороннюю библиотеку с аспектами, то произойдет конфликт версий аспектов и AspectJ не захочет компилировать ваш код.

Проблема решается, если убрать weaveDependencies, но одновременно с этим перестают включаться аспекты, указанные в aspectLibrarys :(

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

И ничего не оставалось, кроме как написать свой :) Представляю на суд свою версию плагина для AspectJ. Все, что нужно будет сделать, это добавить мой репозиторий в свой билд:


...
  <pluginRepositories>
    <pluginRepository>
      <id>anydoby.com</id>
      <url>http://anydoby.com/maven</url>
    </pluginRepository>
  </pluginRepositories>
...

и добавить плагин в билд цикл:


...
      <plugin>
        <groupId>com.anydoby</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>0.0.2</version>
        <configuration>
          <aspectJars>
            <aspectJar>
              <groupId>org.springframework</groupId>
              <artifactId>spring-aspects</artifactId>
            </aspectJar>
          </aspectJars>
        </configuration>
        <executions>          
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>weave</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
...

aspectJars - опциональный блок, описывающий либы, из которых брать аспекты в дополнение к тем, что лежат у вас в src/main/java.

Плагин я протестировал на нескольких своих проектах и он меня полностью устраивает. Более подробная документация по нему находится здесь. Если возникнут проблемы или вопросы, я с радостью на них отвечу.

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

Предыдущая статья Opera под Zenwalk 5.0 Следующая статья E-mail валидатор и не только для Oval