Весенний ботинок на Glassfish
Там я получаю это во время развертывания Spring Boot на GF3,4, хотя это проблема знаю, см
решения нигде не найдено, кроме взлома с помощью try/catch в источниках GF.
Вся проблема связана с аннотациями @Conditional... Spring-Boot, которые содержат ссылки на классы, которые не находятся на CP, и эта проверка GF отключает использование Spring-Boot.
Я не хочу отказываться от Spring-Boot, но отключение @EnableAutoconfiguration не работает, исключая классы автоконфигурации в аннотации, также не работает. Есть ли способ обойти (выбросить все автоконфиги) или я обречен и мне нужно вернуться к ванильной весне?????
Все отдают руки, потому что это кажется проблемой GF. Любой взломанный совет приветствуется.
WARNING|glassfish3.1.2|global|_ThreadID=86;_ThreadName=Thread-2;|Error in annotation processing: java.lang.NoClassDefFoundError: org/springframework/batch/core/configuration/annotation/BatchConfigurer|#]
WARNING|glassfish3.1.2|global|_ThreadID=86;_ThreadName=Thread-2;|Error in annotation processing: java.lang.NoClassDefFoundError: org/springframework/batch/core/configuration/annotation/BatchConfigurer|#]
SEVERE|glassfish3.1.2|global|_ThreadID=86;_ThreadName=Thread-2;|Class [ org/apache/solr/client/solrj/SolrServer ] not found. Error while loading [ class org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration ]|#]
SEVERE|glassfish3.1.2|global|_ThreadID=86;_ThreadName=Thread-2;|Class [ liquibase/integration/spring/SpringLiquibase ] not found. Error while loading [ class org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration$LiquibaseConfiguration ]|#]
SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=86;_ThreadName=Thread-2;|Exception while deploying the app [PaySafeCardConnector-1.0-SNAPSHOT]|#]
SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=86;_ThreadName=Thread-2;|sun.reflect.annotation.TypeNotPresentExceptionProxy
java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:715)
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:522)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:348)
2 ответа
Проблема из-за ошибки в GlassFish. Дополнение try-catch
в GlassFish это не хак, по моему мнению. Это делает обработку аннотаций GlassFish более надежной и приводит ее в соответствие с другими серверами Java EE, такими как WildFly и TomEE.
Если вы счастливы испачкать руки, попробуйте применить исправление в этом выпуске или использовать загрузку Payara, с которой связана проблема. В противном случае для продолжения использования Spring Boot вам придется перейти от GlassFish к другому серверу Java EE или к встроенному контейнеру (Spring Boot поддерживает Tomcat, Jetty и Undertow).
Вы можете обойти это, поместив metadata-complete="true" в ваш web.xml, что говорит Glassfish не обрабатывать аннотации, как приложение уже сделало это.
Это исправляет исключение java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy и, например, позволит разрешить развертывание и успешное выполнение примера приложения Spring Boot war, которое Spring предоставляет.