我想将我的项目升级到第4版,但是,我得到了aspectweaver-1.8.0.M1.jar的缺失依赖项。当我看一下依赖层次结构时,我看到spring-aspects-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。
现在我无法理解两件事:
由于此依赖项的范围是 compile ,为什么我的应用程序需要它?我不想编译spring-aspects.jar !!
为什么使用组件的非稳定版本的spring-aspects-4.0.0.jar( 稳定)?这不会使spring-aspects-4.0.0也不稳定吗?
由于
答案 0 :(得分: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而不是里程碑版本,并且暂时是我可接受的解决方法。
答案 1 :(得分: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-plugin的1.6版本不支持Java 8。
然而,spring-aspects-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>
您可以在spring-aspects 4.0.0依赖项中的aspectjweaver 1.8.0.M1上插入一个排除项。这可能允许您将Spring 4与Java 7以及所有1.7.4 aspectj *依赖项一起使用。
为了在Spring 4 / Java 8项目中应用编译时编织(CTW),我发现了以下帖子:
这是我的解决方案: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 central中找到*依赖项”错误。要解决此问题,请将依赖项复制到主依赖项元素; mvn clean编译;删除复制的依赖项;和maven-antrun-plugin应该找到aspectj *依赖项。然后执行'mvn clean install'并验证ajc logging。
最后,在Intellij中,您会看到此iajc属性的“无法解析符号”错误:
aspectPath="${org.springframework:spring-aspects:jar}"
不用担心,它按预期工作。这是一个maven-antrun-plugin命名约定。
有一天,aspectj-maven-plugin将更新为支持Java 8,然后我们可以恢复正常。也就是说,showWeaveInfo =“true”日志记录要好得多。
希望这会有所帮助。就像我之前的许多人一样,花了很多啤酒来计算出这一点。;)