我将应用程序部署到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上构建应用程序?更改版本?
答案 0 :(得分:1)
它与精确的JVM版本无关 - 从java 7开始使用常量类型“18”。也许container / Tomcat附带过时的javassist版本 - 早于3.16.0-GA。
答案 1 :(得分:0)
使用更高版本的Javassist jar。如果您使用的是maven,请为Java辅助输入以下pom条目。
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>
答案 2 :(得分:0)
使用MVN检查依赖关系树,并检查是否已从javassist库添加了多个版本。
mvn dependency:tree
如果需要,删除旧版本,并在应用程序中保留最新的Javassist 。