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

问题描述 投票:1回答:2

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

java tomcat version openjdk
2个回答
1
投票

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


0
投票

使用更高版本的javassist jar。如果你正在使用maven,请为java辅助创建以下pom条目。

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.18.2-GA</version>
</dependency>
© www.soinside.com 2019 - 2024. All rights reserved.