Tomcat,两个Java版本和“无效常量类型:18”

时间:2017-12-11 11:40:15

标签: java tomcat version openjdk

我将应用程序部署到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上构建应用程序?更改版本?

3 个答案:

答案 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