Версия Maven влияет на развертывание Spring MVC - PullRequest
0 голосов
/ 01 июня 2018

У нас есть приложение, использующее Spring MVC.Недавно мы изменили процесс сборки, чтобы использовать Maven 3.0.5 вместо Maven 3.2.3 (для этого нет соответствующей причины), и начали испытывать исключения, развертываемые в WebLogic.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected org.springframework.security.authentication.AuthenticationManager com.es3.ers.controller.AuthenticationController.authManager; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityConfig': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.es3.ers.filter.AuthenticationTokenProcessingFilter com.es3.ers.config.SecurityConfig.authenticationTokenProcessingFilter; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationTokenProcessingFilter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.springframework.security.authentication.AuthenticationManager com.es3.ers.filter.AuthenticationTokenProcessingFilter.authenticationManager; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'authenticationManager': Requested bean is currently in creation: Is there an unresolvable circular reference?

Некоторые исследования привели к проблемев нашем коде, который мы решили разрешить, чтобы приложение снова заработало, но это действительно заставило меня задуматься о том, почему версия Maven так повлияет на Spring.

Я сравнил версии, построенные на 3.0.5 и 3.2.3 и кроме временных меток в файле MANIFEST различий не было.Затем я посмотрел на структуру архива и заметил, что в версии 3.0.5 было три файла (связанных с ошибкой):

$ unzip -t ers.war | grep -E "(AuthenticationController|AuthenticationTokenProcessingFilter|SecurityConfig)\.class"
    testing: WEB-INF/classes/com/es3/ers/controller/AuthenticationController.class   OK
    testing: WEB-INF/classes/com/es3/ers/filter/AuthenticationTokenProcessingFilter.class   OK
    testing: WEB-INF/classes/com/es3/ers/config/SecurityConfig.class   OK

В 3.2.3 были те же три файла:

$  unzip -t ers.war | grep -E "(AuthenticationController|AuthenticationTokenProcessingFilter|SecurityConfig)\.class"
    testing: WEB-INF/classes/com/es3/ers/filter/AuthenticationTokenProcessingFilter.class   OK
    testing: WEB-INF/classes/com/es3/ers/controller/AuthenticationController.class   OK
    testing: WEB-INF/classes/com/es3/ers/config/SecurityConfig.class   OK

Вы заметите, что AuthenticationController находится перед AuthenticationTokenProcessingFilter из Maven 3.0.5, а в 3.2.3 они противоположны.Из идей я извлек файлы из архива 3.0.5, удалил их и добавил обратно, чтобы они были в том же порядке:

$ unzip ers.war WEB-INF/classes/com/es3/ers/controller/AuthenticationController.class WEB-INF/classes/com/es3/ers/config/SecurityConfig.class
$ zip -d ers.war WEB-INF/classes/com/es3/ers/controller/AuthenticationController.class WEB-INF/classes/com/es3/ers/config/SecurityConfig.class
$ zip -ru ers.war WEB-INF/classes/com/es3/ers/controller/AuthenticationController.class WEB-INF/classes/com/es3/ers/config/SecurityConfig.class
$ unzip -t ers.war | grep -E "(AuthenticationController|AuthenticationTokenProcessingFilter|SecurityConfig)\.class"
        testing: WEB-INF/classes/com/es3/ers/filter/AuthenticationTokenProcessingFilter.class   OK
        testing: WEB-INF/classes/com/es3/ers/controller/AuthenticationController.class   OK
        testing: WEB-INF/classes/com/es3/ers/config/SecurityConfig.class   OK

После манипулирования файлами в архиве мы смоглидля успешного развертывания в WebLogic.Это исправление, очевидно, исправляет ошибку в нашем коде, но что здесь происходит?Я считал, что это связано с Maven, потому что он явно строит WAR в очень последовательном порядке для каждой версии, поэтому мне было интересно, что это изменилось.Maven 3.0.5 и 3.2.3 используют одну и ту же версию подключаемого модуля Maven WAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...