IDEA 编译war包部署到was8.5 java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version offset=6问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengchang_1981/article/details/62482000

     我使用Intellij IDEA14进行java的web工程的开发,JDK使用的是1.7.0_80,但因为项目是部署在was 8.5上且jdk必须用1.6。所以我在IDEA的Project Structure的Project Settings的Modules的Sources标签下设置Language level 设置为6,如图所示:

     

在Artifacts中设置好war包的部署设置,如下图所示:

   

   将编译生成的war包通过was控制台进行发布部署,部署是能够正常发布部署启动成功,但启动应用时却报出异常:

Error 500: java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=com/***/core/webapp/i18n/I18NTag, offset=6

从字面意思可看出是字节码版本不对,通过网上查找IDEA的编译设置,终于解决,在Settings-Build Execution,Deployment-Compiler-Java Compiler中可以在Project bytecode version 统一设置字节码的级别。也可以通过Per-module bytecode version:中对每个module进行字节码级别的设置。点旁边的+可以添加module,在Target bytecode version中可以选择jdk的字节码生成级别,对每个需要设置为1.6级别的module设置如下:


设置后重新编译生成的war包,部署发布到was后,运行正常,未出现java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version 的问题。


总结: 在IDEA这个IDE中在Language level 设置为6只是检查代码是按jdk 6级别来编写。但实际生成的字节码必须在java Compiler中设置级别。如果Project下的module统一是同一个级别编译,则Project bytecode version 统一设置字节码的级别或者按jdk默认来,如果各个module编译级别不相同,则在Per-module bytecode version分别进行相应设置。

猜你喜欢

转载自blog.csdn.net/pengchang_1981/article/details/62482000