Я работаю над переносом наших проектов с java 8 на 11.
В качестве первого шага я собираю его с исходной и целевой совместимостью 1.8, но пытаюсь запустить приложение поверх openjdk-11.
Во время разработки мы используем jetty: run цель, чтобы запустить сервер приложений.Эта цель терпит неудачу из-за этой ошибки:
Caused by: java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.<init>(CommonAnnotationBeanPostProcessor.java:621) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.lambda$buildResourceMetadata$0(CommonAnnotationBeanPostProcessor.java:383) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:713) ~[spring-core-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.buildResourceMetadata(CommonAnnotationBeanPostProcessor.java:365) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:350) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:298) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1043) ~[spring-beans-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:550) ~[spring-beans-5.1.0.RELEASE.jar:5.1.0.RELEASE]
... 63 more
Я обнаружил, откуда исходит неправильная версия аннотации @Resource
:
URL [jar:file:[...]/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar!/javax/annotation/Resource.class]
URL [jar:file:[...]/Applications/apache-maven-3.5.4/lib/jsr250-api-1.0.jar!/javax/annotation/Resource.class]
Кажется, Maven надеваетПлагин classpath всех библиотек, которые он имеет в своей / lib / папке
Я предполагаю, что когда я запускал его на jdk 1.8, аннотация @Resource
от jdk имела приоритет (поскольку я никогда не видел эту ошибку когда-либо), но это больше не так (поскольку эта аннотация больше не включена в jdk11).
Какие есть варианты избавиться от этого старого класса?
(я мог бы обновить библиотекуиз установки maven, но я бы предпочел оставить это в качестве крайней меры, чтобы все работающие над проектом настраивали его установку maven).
РЕДАКТИРОВАТЬ: цель причала: забегаяработает нормально, но с этой целью я не могу сохранить раздел конфигурации <webApp>
плагина.
Это действительно похоже на проблему изоляции пути к классу maven.