不支持的主要.次要版本号 49.0

9

每次登录我的应用程序时,我都会遇到以下异常...

javax.servlet.ServletException: com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl (不支持的 major.minor 版本号 49.0)

这是什么意思,我该如何解决这个问题?

6个回答

14

你正在使用一个与编译该.class文件所用的Java版本不匹配的JVM来运行它。运行该文件的JVM版本较早,无法兼容该类的编译版本。

详见此处,你正在尝试在早期JVM上运行一个1.5版本的类。

编辑:WAS 5.1使用JDK 1.4,看起来是这样的


我正在使用WAS 5.1,而我本地系统中安装的JRE是JRE 1.5.0_06。 - Gourav
@Gourav:运行java -version会显示什么? - Powerlord
1
WAS通常不使用您安装的JVM,它默认安装和运行自己的JVM。 - Matt

7

您的代码是使用Java 1.5编译的,而您正在尝试使用Java 1.4(或更低版本)运行它

解决方案是:

a) Run it with Java1.5 ( perhaps using WAS 6+ ) 
b) Recompile it with Java 1.4

或者
c) Recompile it with Java.15 but specifying the -target flag ( javac -target 1.4 .... ) 

重点在于,您正在尝试在1.4虚拟机中运行1.5字节码。

2

您有一些使用Java 5特性编译的代码,现在想在1.4或更早版本的JVM上运行。请检查您的JAVA_HOME变量是否指向1.5或更高版本的JDK。

更新:根据您的评论,您正在使用WAS 5.1。从记忆中来看,WAS 5.1不支持Java 5,您需要升级到WAS 6.1才能使用Java 5(正在查找参考资料...)


1
这种情况发生在你在一台使用不同JDK版本的机器上编译代码,但最终运行代码的机器上使用了另一个JDK版本。 确保在这些不同的机器上使用相同的JDK版本。

1

如果您使用更高版本的JDK构建类以及较低版本的JAVA,则可以使用javac编译器的-source和-target开关。有些客户需要较低版本的Java,例如1.4,而您正在使用1.6进行开发。-source和-target是这种情况的解决方法。您可以阅读Alex Buckley的论文,该论文非常好地介绍了字节码与源代码版本控制问题。

但是,由于TransformerFactoryImpl是Sun内部类,请检查您的JAVA_HOME容器,但这是特定于容器的。


不幸的是,如果 -source 的设置版本高于 -target,则 javac 将拒绝工作,并且在任何情况下,它都无法防止使用尚不存在于旧版 JRE 中的 API 库的部分。 - Michael Borgwardt

0
使用“sudo update-alternatives --config java”命令,选择你想要使用的Java版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接