javax.servlet.ServletContext загружается из нескольких зависимостей в приложении Springboot - PullRequest
0 голосов
/ 02 марта 2020

Итак, у меня есть приложение springboot, которое я перевожу из WAS в настройку springboot. И у меня есть пара JSP, которые должны быть настроены. Чтобы учесть это, я добавил следующие зависимости:

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <version>9.0.22</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <scope>provided</scope>
    </dependency>

Приложение уже получило следующую зависимость, которая используется в приложении:

    <dependency>
      <groupId>com.ibm</groupId>
      <artifactId>com.ibm-jaxrpc-client</artifactId>
      <version>6.0</version>
    </dependency>

Проблема, с которой я сталкиваюсь, что обе эти зависимости (jaxrp c -client и tomcat-embed-jasper) содержат классы javax.servlet.ServletContext, которые вызывают следующую ошибку:

The method's class, javax.servlet.ServletContext, is available from the following locations:

    jar:file:/C:/Users/.m2/repository/com/ibm/com.ibm-jaxrpc-client/6.0/com.ibm-jaxrpc-client-6.0.jar!/javax/servlet/ServletContext.class
    jar:file:/C:/Users/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.30/tomcat-embed-core-9.0.30.jar!/javax/servlet/ServletContext.class

It was loaded from the following location:

    file:/C:/Users/.m2/repository/com/ibm/com.ibm-jaxrpc-client/6.0/com.ibm-jaxrpc-client-6.0.jar


Action:

Correct the classpath of your application so that it contains a single, compatible version of javax.servlet.ServletContext

Я не могу позволить себе удалить любая из этих зависимостей. jaxrp c -клиент упоминается в коде уже во многих местах, и мне нужен tomcat-embed-jasper для рендеринга моих jsp страниц. Я не могу исключить класс ServletContext, так как он не является зависимостью (если я не ошибаюсь в концепции исключения). Пожалуйста, помогите с решением этой проблемы.

1 Ответ

0 голосов
/ 02 марта 2020

Я не знаком с клиентом IBM jaxrp c, но, полагаю, у вас есть это исключение во время выполнения при попытке загрузить приложение.

В этом случае рассмотрите следующие подходы:

  1. Использование другой клиентской библиотеки jax-rp c

  2. Попробуйте загрузить код, использующий эту библиотеку, с другим загрузчиком классов (вы для этого нужно создать один загрузчик классов), чтобы избежать кл sh

  3. Вид перефразирования второго варианта. Вы можете "играть" (переопределить порядок загрузки указанных классов c) с помощью загрузчика классов с пружинной загрузкой, как описано в этой статье

Я знаю, это слишком общий ответ, но, надеюсь, это все еще полезно. Первое решение, безусловно, самое простое, что я могу придумать.

Второе решение выполнимо, однако оно во многом зависит от того, как именно код, который использует клиент jax rp c, загружается и используется.

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