【发布时间】:2018-11-09 08:15:10
【问题描述】:
在我的 Spring Boot 项目中使用 Oracles OJDBC Driver 在 tomcat 8.5 服务器(不是嵌入式 tomcat)上运行时出现以下错误
NoClassDefFoundError: oracle/i18n/util/LocaleMapper
如果我使用嵌入式 tomcat 运行它,一切正常。不幸的是,我需要它在外部容器上运行(我认为它被称为)
我从https://start.spring.io/生成了我的项目
一切都是默认的,除了 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) 运行项目
我发现其他人也有同样的问题,比如这些
- ClassNotFoundException oracle.i18n.util.LocaleMapper on tomcat TLD scanning. ojdbc7 maven dep (xmlparserv2-12.1.0.2.jar transitive) causes this error
- https://github.com/spring-projects/spring-boot/issues/8682
但我不知道他们在说什么。这是第一次使用 Java 和 Spring 以及 Oracle 和 Eclipse :(
【问题讨论】:
-
我没有 pom.xml 文件。据我了解,这是 Maven 的事情,我正在使用 Gradle
-
我的坏事没有注意到,不幸的是我没有用 Grandle 做太多的开发:(。
-
这些链接与您遇到的问题有关。 Oracle 驱动程序有自己的 XML 解析器,Tomcat 正在使用它。这是一团糟,但 StackOverflow 问题中提供的解决方案应该适合您。您需要自己创建 META-INF/services 文件并将它们放入 WAR。不知道他们应该去哪里,抱歉。
标签: java spring oracle tomcat gradle