Tomcat,两个Java版本和 "invalid constant type: 18"

标签 tomcat version java

我在将我的应用程序部署到 Tomcat 时遇到问题。我在 Docker 容器上安装了 Tomcat,java -version 给出的输出如下:

openjdk version "1.8.0_151"
OpenJDK Runtime Environment (IcedTea 3.6.0) (Alpine 8.151.12-r0)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

该应用是在 Windows 机器上构建的,使用:

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) 

尝试启动应用程序时,我得到:

Caused by: java.io.IOException: invalid constant type: 18
    at javassist.bytecode.ConstPool.readOne(ConstPool.java:967)
    at javassist.bytecode.ConstPool.read(ConstPool.java:910)
    at javassist.bytecode.ConstPool.<init>(ConstPool.java:127)
    at javassist.bytecode.ClassFile.read(ClassFile.java:630)
    at javassist.bytecode.ClassFile.<init>(ClassFile.java:52)

还有一件事 - 在 Windows 机器上构建的应用程序在具有 Java 版本的服务器上运行得很好:

openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

遇到这种情况我该怎么办?在 OpenJDK 上构建应用程序?更改版本?

最佳答案

它不应该与确切的 JVM 版本相关 - 自 java 7 以来使用常量类型“18”。也许容器/Tomcat 附带过时的 javassist 版本 - 早于 3.16.0-GA。

关于Tomcat,两个Java版本和 "invalid constant type: 18",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47752144/

相关文章:

java - ClassCastException 与 JAXB - Websphere jar 与 applicationl jar

java - 使用 ServiceMix 与 Tomcat/WAR 模型的优缺点是什么?

node.js - 使 `npm install --save` 为 package.json 添加严格版本

Android Developer Dashboard 国家/地区版本

java - 从 HashMap 键获取路径 (Java)

java - 使用 Spring Data 时,我应该如何注册自定义 Hibernate 5 数据类型(BasicType)?

java - 无法在 Tomcat 8.0.2 上的 Netbeans 中部署我的 Web 应用程序(出现以下错误)

java - Tomcat:JSP 无法识别我的类文件

ruby - Gem 依赖版本含义

java - 纹理环绕模式重复不起作用