You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 9.0.75与ORDS 22.2/23.1兼容异常求助

问题描述

我正在安装Oracle Apex 23.1,为访问开发界面及应用,在Windows环境部署了Tomcat 9.0.75与ORDS 23.1。将ORDS作为独立服务器运行时一切正常,但部署到Tomcat后,系统提示/ords资源不可用。

查看Tomcat的catalina日志,记录如下:

05-Jun-2023 14:30:47.570 SEVERE [main] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file 05-Jun-2023 14:30:47.616 SEVERE [main] org.apache.catalina.core.StandardContext.startInternal Context [/ords] startup failed due to previous errors 0

进一步查看localhost日志,核心错误为:

Error configuring application listener of class [oracle.dbtools.entrypoint.WebApplicationEntryPoint]
java.lang.UnsupportedClassVersionError: oracle/dbtools/entrypoint/WebApplicationEntryPoint has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class [oracle.dbtools.entrypoint.WebApplicationEntryPoint])

我已尝试安装最新版Java JDK/JRE、修改系统Path变量、配置Tomcat的JVM路径、解锁Oracle数据库必要用户,甚至将ORDS降级至22.2版本,但问题仍未解决。请问有什么解决建议?

以下是Tomcat的localhost日志完整内容:

05-Jun-2023 14:30:47.570 SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class [oracle.dbtools.entrypoint.WebApplicationEntryPoint] java.lang.UnsupportedClassVersionError: oracle/dbtools/entrypoint/WebApplicationEntryPoint has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class [oracle.dbtools.entrypoint.WebApplicationEntryPoint]) at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2475) at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:875) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1376) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1220) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:487) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:469) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:141) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4421) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4946) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:662) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1023) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1910) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.util.concurrent.AbstractExecutorService.submit(Unknown Source) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:824) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1617) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:318) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:898) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) at java.util.concurrent.FutureTask.run(Unknown Source) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.util.concurrent.AbstractExecutorService.submit(Unknown Source) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:871) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:914) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Catalina.start(Catalina.java:772) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478) 05-Jun-2023 14:30:47.570 SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Skipped installing application listeners due to previous error(s)
解决建议
  • 彻底确认Tomcat使用的JDK版本:

    1. 进入Tomcat的bin目录,若没有setenv.bat则新建文件,添加以下内容强制指定Java 11及以上版本的JDK路径:
      set JAVA_HOME=C:\Program Files\Java\jdk-17.0.x
      set JRE_HOME=C:\Program Files\Java\jdk-17.0.x\jre
      
    2. 启动Tomcat后,查看localhost.log开头的JVM初始化信息,确认版本是否为Java 11+;也可启用Tomcat管理控制台,在系统信息中查看JVM版本。
    3. 排查系统中是否存在多个JDK/JRE实例,比如Windows自带的旧版Java,确保Tomcat没有默认调用这些低版本环境。
  • 重新生成匹配版本的ORDS WAR包:

    1. 明确ORDS版本要求:ORDS 22.2及以上版本必须运行在Java 11及以上环境,不能用Java 8部署。
    2. 切换到Java 11+的环境,重新执行ords war命令生成WAR包,替换Tomcatwebapps目录下的旧WAR包。
  • 清理Tomcat缓存与旧部署文件:

    1. 停止Tomcat服务,删除Tomcat目录\work下的所有文件,同时删除webapps下的ords文件夹和ords.war文件。
    2. 将新生成的ORDS WAR包放入webapps目录,重启Tomcat让其自动解压部署。
  • 检查Tomcat启动脚本的JVM参数:
    打开Tomcat目录\bin\catalina.bat,确认脚本中没有硬编码指定低版本Java的路径或参数,避免强制Tomcat使用Java 8。

内容的提问来源于stack exchange,提问作者Fabio Ceron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:14:55