Невозможно найти зависимость spring-aspect-4

Я хочу обновить свой проект до весны 4, однако я получаю отсутствующую зависимость для aspectweaver-1.8.0.M1.jar. Когда я смотрю на иерархию зависимостей, я вижу, что этот файл необходим Spring-aspect-4.0.0, который имеет следующее в своем собственном pom.xml

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.8.0.M1</version>
  <scope>compile</scope>
</dependency>

После проверки хранилища maven я не смог найти этот артефакт, так как последняя стабильная версия aspectweaver - 1.7.4.

Теперь я не могу понять две вещи:

  1. Поскольку объем этой зависимости компилируется, зачем это нужно моему приложению? Я не хочу компилировать spring-aspects.jar !!

  2. Почему spring-aspect-4.0.0.jar (который является стабильным) с использованием нестабильной версии компонента? Разве это не сделает весенние аспекты 4.0.0 также нестабильными?

благодаря

Ответ 1

Согласно опубликованной проблеме на springsource, aspectjweaver "в основном идентичен AspectJ 1.7", за исключением того, что он имеет раннюю поддержку Java 8.

Поскольку мне не нужна поддержка Java 8, я в основном добавил зависимость компиляции к последней версии версии:

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.7.4</version>
</dependency>

Это гарантирует, что 1.7.4 будет использоваться вместо релиза вехи, и это приемлемое решение для меня в настоящее время.

Ответ 2

Чтобы разрешить зависимость aspectjweaver, добавьте этот репозиторий:

<repository>
    <id>spring-milestones</id>
    <url>http://repo.spring.io/milestone</url>
    <snapshots>
        <enabled>true</enabled>
    </snapshots>
</repository>

Это даст вам доступ к версии 1.8.0.M1 аспектов aspectjrt, aspectjweaver и aspectjtools.

Однако версия 1.6 плагина aspectj-maven не поддерживает Java 8.

Однако spring-aspect-4.0.0 имеет зависимость от aspectjweaver 1.8.0.M1 для поддержки Java 8.

Если вы используете Spring 3.2.6 и Java 7, эта конфигурация aspectj-maven-plugin работает:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.6</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <complianceLevel>1.7</complianceLevel>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
                <showWeaveInfo>true</showWeaveInfo>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Возможно, вы сможете вставить исключение в aspectjweaver 1.8.0.M1 в зависимости от Spring-аспектов 4.0.0. И это может позволить вам использовать Spring 4 с Java 7 и всеми зависимостями 1.7.4 aspectj *.

В попытке применить компиляцию во времени (CTW) в проекте Spring 4/Java 8 я столкнулся со следующими сообщениями:

  1. Maven, Scala, Spring, AspectJ

  2. https://weblogs.java.net/blog/fabriziogiudici/archive/2011/07/19/making-lombok-aspectj-and-maven-co-exist

И вот мое решение: https://github.com/javawerks/homeschool/blob/master/pom.xml

Оно работает! Обратите внимание, что это решение использует версию 1.8.0.M1 из 3 аспектовj * amigos, которую можно найти здесь: http://repo.spring.io/milestone/org/aspectj/

Предупреждение. Если ваш локальный репозиторий maven еще не имеет зависимостей maven-antrun-plugin, вы получите ошибки "не можете найти * в центральных ошибках maven". Чтобы устранить эту проблему, скопируйте зависимости в свой основной элемент зависимостей; mvn clean compile; удалять скопированные зависимости; и maven-antrun-plugin должен найти зависимости aspectj *. Затем выполните "mvn clean install" и проверьте журнал ajc.

Наконец, в Intellij вы увидите ошибку "не могу разрешить символ" для этого атрибута iajc:

aspectPath="${org.springframework:spring-aspects:jar}"

Не беспокойтесь, он работает так, как ожидалось. Это соглашение об именах maven-antrun-plugin.

Когда-нибудь плагин aspectj-maven будет обновлен для поддержки Java 8, и тогда мы сможем вернуться к нормальной жизни. Тем не менее, запись в showWeaveInfo = "true" намного приятнее.

Надеюсь это поможет. Как и многие передо мной, для этого нужно было много пива;)