使用闭包时 Spring 4 依赖注入(inject)失败
我正在使用 Java8 和 Spring 4.1.5 开发一个 Portlet 项目
我有一个用 @Service
注释的类,其中包括这一行(任何闭包都会失败)
user.getOrganizations().stream().forEach(o -> System.out.println(o));
当我部署我的 web 应用程序时,出现以下错误(省略了大量堆栈跟踪)
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [C:\dev\liferay-developer-studio\DeveloperStudio\workspace\somepath\service\MyService.class];
nested exception is java.lang.ArrayIndexOutOfBoundsException: 52264
....
Caused by: java.lang.ArrayIndexOutOfBoundsException: 52264
at org.springframework.asm.ClassReader.readClass(Unknown Source)
我在 MVN 中的依赖如下:
myGroupId:myArtifactId:war:0.0.0-SNAPSHOT
+- com.liferay.portal:portal-service:jar:6.2.10.11:provided
+- com.liferay.portal:util-bridges:jar:6.2.10.11:provided
+- com.liferay.portal:util-java:jar:6.2.10.11:provided
+- com.liferay.portal:util-taglib:jar:6.2.10.11:provided
+- javax.portlet:portlet-api:jar:2.0:provided
+- javax.servlet:servlet-api:jar:2.5:provided
+- javax.servlet.jsp:jsp-api:jar:2.2:provided
+- org.springframework:spring-webmvc-portlet:jar:4.1.5.RELEASE:provided
| +- org.springframework:spring-beans:jar:4.1.5.RELEASE:provided
| +- org.springframework:spring-context:jar:4.1.5.RELEASE:provided
| | +- org.springframework:spring-aop:jar:4.1.5.RELEASE:provided
| | | \- aopalliance:aopalliance:jar:1.0:provided
| | \- org.springframework:spring-expression:jar:4.1.5.RELEASE:provided
| +- org.springframework:spring-core:jar:4.1.5.RELEASE:provided
| | \- commons-logging:commons-logging:jar:1.2:provided
| +- org.springframework:spring-web:jar:4.1.5.RELEASE:provided
| \- org.springframework:spring-webmvc:jar:4.1.5.RELEASE:provided
+- org.springframework:spring-test:jar:4.1.5.RELEASE:test
+- org.mockito:mockito-all:jar:1.10.8:test
+- junit:junit:jar:4.11:test
| \- org.hamcrest:hamcrest-core:jar:1.3:test
+- org.powermock:powermock-module-junit4:jar:1.5.1:test
| \- org.powermock:powermock-module-junit4-common:jar:1.5.1:test
| \- org.powermock:powermock-reflect:jar:1.5.1:test
| \- org.objenesis:objenesis:jar:1.2:test
+- org.powermock:powermock-module-junit4-rule-agent:jar:1.5.1:test
| +- org.powermock:powermock-module-javaagent:jar:1.5.1:test
| \- org.powermock:powermock-core:jar:1.5.1:test
| \- org.javassist:javassist:jar:3.18.0-GA:test
\- org.powermock:powermock-api-mockito:jar:1.5.1:test
\- org.powermock:powermock-api-support:jar:1.5.1:test
到目前为止我找到的每个解决方案都说“如果您正在使用 spring 3 更新到 spring 4”,但我已经在使用它了
有什么想法吗?
干杯
请您参考如下方法:
原来问题是我正在使用的容器 - Liferay - 有一个旧版本的 Spring(3.something)。
我的pom中的依赖是提供的
;此外,在我的 liferay-plugin-package.properties
属性 portal-dependency-jars
中有列表中的 spring jars。
这意味着我的插件使用的是 Liferay 的库,旧版本的 ASM 无法使用新的 Java8 语法功能解析类的字节码,因此出现了损坏。
为了解决这个问题,我从 liferay-plugin-package.properties
中删除了 spring jar,并将我的 pom 中的 spring 范围设置为 compile
。这解决了问题。
(注意:Liferay 目前不正式支持 Java 8,因此他们不打算升级他们的 spring 版本)
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。