Tomcat загружал весенние библиотеки более низкой версии при отладке в Intelli-й-идее - PullRequest
0 голосов
/ 03 июня 2019

У меня есть сборка веб-проекта maven spring (3.2. *) С целевой войной, я хочу отладить его в intellij idea с помощью tomcat (web: war exploded artifact), но веб-приложение всегда не загружалось,

[ОШИБКА] .. | Сбой инициализации контекста java.lang.NoSuchMethodError: org.springframework.web.context.ConfigurableWebApplicationContext.getEnvironment () Lorg / springframework / core / env / ConfigurableEnvironment;at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext (ContextLoader.java:404)

Поскольку в некоторых зависимостях pom они ссылаются на более низкую версию Spring (3.0.7), я могу исключить их впосуда с maven-war-plugin (2.3): упаковка исключает, но как я могу исключить их в сети: война взорвалась.

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <packagingExcludes>
            WEB-INF/lib/org.springframework.core-3.0.7.RELEASE.jar,
            // others springframework jars
        </packagingExcludes>
    </configuration>
</plugin>

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

В Maven непросто понять, как разрешать конфликты зависимостей. Это называется стратегия ближайших побед , которая может привести к использованию более старой версии.

Попробуйте использовать Maven Dependency Management в сочетании с Maven Enforcer Plugin для исправления версии и сбоя сборки, если вы не определили версию зависимости явно.

Самый простой способ - проанализировать граф зависимостей с помощью

mvn dependency:tree

проверьте, какая зависимость зависит от старой весенней библиотеки, и исключите такую, как @ alexandar-petrov, уже опубликованную в его ответе.

Исключение зависимости из создаваемого артефакта не повлияет на путь к классу, который будет использовать Intellij или любая другая IDE.

0 голосов
/ 03 июня 2019

Это не плагин, где вы должны исключать зависимости относительно IDE, это граф зависимостей.Используйте mvn dependency: tree, чтобы увидеть, какой модуль, зависимость включил старую весеннюю версию.Когда вы выясните это, исключите его из сборки.

Вот пример того, как использовать исключение зависимостей, поступающее прямо из документации maven .

<dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...