2013-12-20 136 views
11

我想將我的項目升級到spring 4,但是,我得到了缺少aspectweaver-1.8.0.M1.jar的依賴關係。當我看看的依賴層次,我看到這個文件是由彈簧方面-4.0.0,該公司在其自己的pom.xml找不到spring-aspects-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(其穩定),使用非穩定版本的部件的?這不會使Spring-aspects-4.0.0也不穩定嗎?

感謝

+2

您可能需要添加相應的里程碑存儲庫;我不知道它是哪一個。關於'spring-aspects'依賴的好問題,我會提出一個錯誤。 – chrylis

+0

我再次檢查了spring-aspects的依賴關係,並且找不到任何里程碑存儲庫!從哪裏下載aspectjweaver 1.8.0.M1 ?? – Serafeim

+0

似乎是在依賴管理中使用gradle。在文件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的支持,我基本上都添加了一個編譯依賴於aspectweaver最新發布的版本:

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

這確保了1.7.4代替里程碑版本,並且是對於我來說暫時是一個可以接受的解決方法。

+0

你也可以回答我的問題1:「由於這種依賴的範圍是編譯爲什麼我的應用程序需要它」?另外,在Springource的jira中提到,「如果這仍然需要一段時間,我們可能不得不正式記錄如何用AspectJ 1.7替代那些在那裏關注的人的依賴。」你是否也可以將它包含到你的答案中(用aspectjweaver替換1.8.0.M1的依賴關係爲1.7.4)? – Serafeim

+1

範圍「編譯」的依賴並不意味着您將實際編譯它。這隻意味着你需要編譯你的項目的工件。它也包含在war文件中,如果你做了一個「mvn包」。順便說一下,編譯範圍是默認範圍。 – reidarok

6

要解決的aspectjweaver依賴,加上這個倉庫:

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

這會給你訪問aspectjrt,aspectjweaver和aspectjtools的1.8.0.M1版本。

但是,AspectJ的Maven的插件的1.6版本不支持Java 8

然而彈簧方面-4.0.0具有對Java 8支持上aspectjweaver 1.8.0.M1的依賴。

如果你使用Spring 3.2.6和Java 7,這AspectJ的Maven的插件配置工作:

 <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-aspects 4.0.0依賴。這可能允許您使用Spring 4與Java 7以及所有1.7.4版本的依賴關係。

在應用的編譯時間在春季4/Java的8項目,我碰到下面的帖子來織(CTW)的努力:

  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

它的工作原理!請注意,此解決方案使用3 aspectj * amigos的1.8.0.M1版本,可在此處找到:http://repo.spring.io/milestone/org/aspectj/

警告:如果您的本地Maven存儲庫尚未具有maven-antrun-plugin依賴項,那麼您將得到「無法找到Maven中心的依賴」錯誤。要解決此問題,請將依賴項複製到主依賴項元素; mvn清理編譯;刪除複製的依賴關係;而maven-antrun-plugin應該找到aspectj *依賴關係。然後執行'mvn clean install'並驗證ajc日誌記錄。

最後在的IntelliJ你會看到一個「無法解析符號」錯誤此iajc屬性:

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

不用擔心,它按預期工作。這是一個maven-antrun-plugin命名約定。

有一天,aspectj-maven-plugin將被更新爲支持Java 8,然後我們可以恢復正常。也就是說,showWeaveInfo =「true」記錄更好。

希望這會有所幫助。就像我之前的很多人一樣,花了很多啤酒來弄清楚這一點;)

+0

+1這是一個很好的詳細解釋。如果您有時間可以請添加一個示例以支持您所做的以下聲明。 _「你也許可以在spring-aspects 4.0.0依賴關係中插入一個排除在aspectjweaver 1.8.0.M1上的方法,並且這可能允許你使用Spring 4與Java 7以及1.7.4所有的aspectj *依賴關係。 「_ –

+0

FWIW,我更新了pom.xml以反映Spring和Aspectj的最新版本。 aspectj-maven-plugin尚未針對Java 8進行更新。 – javawerks

+0

pom.xml包含相對於原始帖子的詳細註釋,希望能夠讓事情更清晰。 – javawerks