我将应用程序部署到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。
使用更高版本的javassist jar。如果你正在使用maven,请为java辅助创建以下pom条目。
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>