Драйвер Oracle OJDBC выдает ошибку NoClassDefFoundError: oracle / i18n / util / LocaleMapper

Я получаю указанную ниже ошибку при использовании драйвера Oracles OJDBC в моем проекте Spring Boot при работе на сервере tomcat 8.5 (не встроенном tomcat)

NoClassDefFoundError: oracle/i18n/util/LocaleMapper

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

Я создал свой проект из https://start.spring.io/

Драйвер Oracle OJDBC выдает ошибку NoClassDefFoundError: oracle / i18n / util / LocaleMapper

Все по умолчанию, кроме драйвера oracle.

build.gradle

buildscript {
    ext {
        springBootVersion = '2.0.2.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()

    maven {
      credentials {
        username = oracleUser
        password = oraclePass
    }
   url 'https://www.oracle.com/content/secure/maven/content'
  }
}

configurations {
    providedRuntime
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('com.oracle.jdbc:ojdbc8:12.2.0.1')
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Трассировки стека

SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/centralized-sourcing-backend]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:939)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/centralized-sourcing-backend]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    ... 6 more
Caused by: java.lang.NoClassDefFoundError: oracle/i18n/util/LocaleMapper
    at oracle.xml.parser.v2.XMLReader.setEncoding(XMLReader.java:990)
    at oracle.xml.parser.v2.XMLReader.checkXMLDecl(XMLReader.java:3542)
    at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:580)
    at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:284)
    at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:243)
    at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1458)
    at org.apache.tomcat.util.descriptor.web.WebXmlParser.parseWebXml(WebXmlParser.java:119)
    at org.apache.tomcat.util.descriptor.web.FragmentJarScannerCallback.scan(FragmentJarScannerCallback.java:77)
    at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:342)
    at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:193)
    at org.apache.catalina.startup.ContextConfig.processJarsForWebFragments(ContextConfig.java:1898)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1126)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:775)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5114)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: oracle.i18n.util.LocaleMapper
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    ... 23 more

Я запускаю проект из Spring Tool Suite (STS) следующим образом

Драйвер Oracle OJDBC выдает ошибку NoClassDefFoundError: oracle / i18n / util / LocaleMapper

Я нашел других людей с той же проблемой, например этих

но я понятия не имею, о чем они говорят. Это первый раз, когда мы работаем с Java и Spring, Oracle и Eclipse :(

У меня нет файла pom.xml. Насколько я понимаю, это вещь Maven, и я использую Gradle

Snæbjørn 30.05.2018 15:13

Мой плохой не заметил, к сожалению, я не очень много работал с Grandle :(.

KALALEX 30.05.2018 15:18

Эти ссылки связаны с вашей проблемой. Драйвер Oracle имеет собственный анализатор XML, который подхватывает Tomcat. Это ужасный беспорядок, но решение, представленное в этом вопросе StackOverflow, должно работать на вас. Вам нужно будет самостоятельно создать файлы МЕТА-ИНФ / услуги и поместить их в WAR. Не уверен, куда им конкретно идти, извините.

Peter Ledbrook 31.05.2018 15:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
2 238
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение заключалось в том, чтобы сделать то, что было предложено здесь, а не пытаться понять это. Поместите несколько волшебных файлов в волшебное место (src/main/resources/META-INF/services/), и все заработало: /

Другие вопросы по теме