我在将我的应用程序部署到 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/