2013-12-20 3 views
11

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

<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. Почему весна-аспекты-4.0.0.jar (который является стабильными) с использованием Нестабильных версии компоненты? Разве это не сделает весенние аспекты 4.0.0 также нестабильными?

Благодаря

+2

Возможно, вам понадобится добавить соответствующий вехой; Я не знаю, какие они есть. Хорошие вопросы о зависимостях 'spring-aspect', и я бы подал на него ошибку. – chrylis

+0

Я снова проверил зависимости весенних аспектов и не смог найти никаких хранилищ вехи! Откуда он загружает aspectjweaver 1.8.0.M1 ?? – Serafeim

+0

Кажется, что использует управление градиентом в управлении зависимостями. В файле https://github.com/spring-projects/spring-framework/blob/v4.0.0.RELEASE/build.gradle я могу видеть, что '' ext.aspectjVersion = "1.8.0.M1" ''. – Serafeim

ответ

8

По a reported issue at springsource, aspectjweaver является "в основном идентична AspectJ 1.7" за исключением того, что она имеет раннюю поддержку Java 8.

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

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

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

+0

Не могли бы вы также ответить на мой вопрос 1: «Поскольку объем этой зависимости компилируется, почему мое приложение нуждается в этом»? Кроме того, в jira источника springsource упоминается, что «Если это все еще занимает некоторое время, нам, возможно, придется официально документировать, как заменить эту зависимость с AspectJ 1.7 для всех, кого это касается». Не могли бы вы также включить это в свой ответ (замените зависимость 1.8.0.M1 на 1.7.4 для aspectjweaver)? – Serafeim

+1

Зависимость от области «компиляция» не означает, что вы ее скомпилируете. Это означает, что для сбора вашего проекта требуется артефакт. Он также включен в файл войны, если вы делаете «mvn package». Между прочим, область компиляции - это область по умолчанию. – reidarok

6

Чтобы устранить зависимость 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.

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

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

 <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 в пределах весна-аспекты 4.0.0. И это может позволить вам использовать Spring 4 с Java 7 и всеми зависимостями 1.7.4 aspectj *.

В попытке применить время компиляции ткачество (БКМ) в 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 aspectj * 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" намного приятнее.

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

+0

+1 Это отличное подробное объяснение. Если у вас есть время, вы можете добавить пример для поддержки следующего заявления, которое вы сделали. _ «Возможно, вы можете вставить исключение в aspectjweaver 1.8.0.M1 в зависимости от Spring-аспектов 4.0.0. И это может позволить вам использовать Spring 4 с Java 7 и всеми зависимостями 1.7.4 aspectj *. "_ –

+0

FWIW, я обновил pom.xml, чтобы отразить последнюю версию Spring и Aspectj. Аспектj-maven-plugin до сих пор не обновлен для Java 8. – javawerks

+0

В pom.xml содержатся подробные комментарии относительно исходного сообщения, надеюсь, что-то станет понятным. – javawerks

Смежные вопросы