2015-04-09 2 views
3

я работаю на портлетах проект с использованием Java8 и Spring 4.1.5Спринга инъекция 4 зависимости не удается при использовании замыкания

У меня есть класс с аннотацией @Service, который включает эту линию (такой же провал с любым закрытием)

user.getOrganizations().stream().forEach(o -> System.out.println(o));

Когда я раскрываю свой веб-приложение, я получаю следующее сообщение об ошибке (опуская массивную стека, след)

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 

Каждое решение, которое я нашел до сих пор говорит: «Если вы используете пружину 3 обновления до весны 4», но я уже использую его

Любые идеи ?

Приветствие

+1

Почему CGLIB на верхнем уровне дерева зависимостей? Я ожидал бы, что это переходная зависимость Spring, а не явная декларация. – skaffman

+0

Вы правы, спасибо, что указали это. Я удалил CGLIB, но я все равно получаю ту же ошибку –

+0

Можете ли вы опубликовать аннотированный класс '@ Service'? Где именно эта линия? –

ответ

2

Оказывается, что этот вопрос является контейнером, я работаю с - Liferay - имеет более старую версию Spring (3.something).

Зависимости в моем пом ... provided; кроме того, в моем liferay-plugin-package.properties имущество portal-dependency-jars имело весенние банки в списке.

Это означает, что в моем плагине используются библиотеки Liferay, у которых более старая версия ASM неспособна разобрать байт-код классов с использованием новых синтаксических функций Java8, следовательно, поломка.

Чтобы решить эту проблему, я избавился от весенних банок от liferay-plugin-package.properties и установил рамки для весны в моем пом, до compile. Это решило проблему.

(Примечание: Liferay официально не поддерживает Java 8 в данный момент, так что они не предназначены для обновления их весеннюю версию еще)

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