MyEclipse工程中Java Build Path中的JDK版本和Java Compiler Compiler compliance level的区别
感谢大佬:https://blog.csdn.net/shan9liang/article/details/17266519
问题起源:
今天再在ESB调用WebService测试,需要在jboss上部署一个ejb项目(ejb发布的webservice),过去部署好好的代码,这次再部署上去竟然报错了,log记录的错误如下:
[org.jboss.detailed.classloader.ClassLoaderManager] (HDScanner) Unexpected error during load of:com.jialin.ejb.UserManagerBean
java.lang.UnsupportedClassVersionError: com/jialin/ejb/UserManagerBean : Unsupported major.minor version 51.0
…………
…………
2013-12-11 14:48:34,329 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] (HDScanner) Error installing to PostClassLoader: name=vfszip:/F:/jboss-5.1.0.GA/server/default/deploy/ejb_webservice1.jar/ state=ClassLoader mode=Manual requiredState=PostClassLoader
org.jboss.deployers.spi.DeploymentException: Cannot process metadata
…………
…………
开始寻找解决方案:
环境:
jdk 1.6;
jboss 5.1.0.GA
eclipse 4.2

这里可以配置的jdk,还有个java compiler中可以配置compiler level(如图中红色框)。这两个东西就是这个问题的关键。
在eclipse中进行开发的时候,build path 中JDK进行类库的编译(就是你使用类在不在这个JDK中),java compiler compliance level是对这个项目语法的编译(就是你的项目中语法的正确与否),也可以把java compiler compliance level中配置的编译版本号的作用看作是你这个项目将来开发完毕之后,要放到服务器上运行,那个服务器上JDK的运行版本。
而我的问题就出在build path中配置1.6的JDK,java compiler compliance level中配置的1.7(因为以前我用过一段时间1.7)

而在jboss服务器上是1.6的JDK,就报了那个错误,说是编译所用的jdk(1.7)比运行所用的jdk(1.6)高了,这是错误的。
放在其他人机器上之所以不报错,是因为他的jboss使用的jdk恰恰是1.7。这个版本是向下兼容的。
最精准的解释如下:
Build Path是运行时环境
Compiler是编译时环境
再拿个被人举过的例子,如果JDK1.4不能使用泛型。而java compiler compliance level设置的是你写好的JAVA代码按照什么JDK版本级别编译,例如:设置的是1.4,编译出来的class文件可以在1.4以上的JRE上运行,如果用的是5.0级别编译,就不能运行在1.4的环境里面,会提示版本过高。
总结:
1、在开发和部署过程中,最安全的做法,是build path , java complier compliance level,jboss服务器配置的JDK都保持一致,就不会出现任何问题的。
2、我们常常关注build path中jdk的版本和jboss中jdk版本,殊不知他们是通过 java complier compliance level联系起来的。
有时候我们并不能仅仅按照网上的解决步骤把问题解决了就算万事大吉了。我不得不承认这是解决问题的捷径,但从捷径走过后,我们应分析和总结问题的来龙去脉,真正理解它的本质,才算是一种积累,因为网上的解决方案永远是针对过时的技术,新技术暴露的问题依然会让你手足无措,但幸好技术的本质是不容易改变的,所以说,抓住本质,才是常胜之道。
不知道从什么时候开始,已经不再满足于解决问题就好,呵呵。
MyEclipse工程中Java Build Path中的JDK版本和Java Compiler Compiler compliance level的区别的更多相关文章
- Eclipse工程中Java Build Path中的JDK版本和Java Compiler Compiler compliance level的区别(转)
在这里记录一下在eclipse中比较容易搞混淆和设置错误的地方.如下图所示的功能: 最精准的解释如下: Build Path是运行时环境 Compiler是编译时环境 假设,你的代码用到泛型,Bu ...
- 关于eclipse的maven项目Java Build Path中maven依赖报错问题
场景描述: respository仓库位置变动过,代码注解等报错 解决方法: 选中项目,点击maven ->update Project即可.
- eclipse中的项目Java build path (Java创建路径)详解
1.Source标签页,指定本工程的源码目录和输出目录.Projects标签页,指定本工程所依赖的其他工程.Libraries标签页,指定本工程所需的jar包和class目录等.Order And E ...
- MyEclipse Java Build Path详解
转载自:http://blog.163.com/magicc_love/blog/static/185853662201111161580631/ 1.设置"source folder&qu ...
- 异常-----The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。
1, 找到新建页面所在的工程名字,然后左键选中,右键弹出功能菜单,选择Build Path,进入配置路径. 2, 在java build path 页面的下选择Libraries栏目(默认选择),点击 ...
- Eclipse Java Build Path详解
Eclipse Java Build Path详解 1.设置"source folder"与"output folder". * source folder:存 ...
- 如何解决JSP页面顶端报错 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
题目有点长,昨天刚接触jsp,按照网上的教程安装完 tomcat 和 eclipse EE 之后,新建jsp文件却出现了如下报错: The superclass "javax.servlet ...
- 新建 jsp异常,The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
新项目,新建jsp页面的时候报异常: Multiple annotations found at this line: - The superclass "javax.servlet.htt ...
- eclipse中web工程新建jsp文件报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
web工程中新建jsp文件提示:The superclass "javax.servlet.http.HttpServlet" was not found on the Java ...
随机推荐
- elementUI表单嵌套表格并对每行进行校验
elementUI表单嵌套表格并对每行进行校验 elementUI 表单嵌套表格并进行校验. 目录 效果展示 代码链接 关键代码 完整代码 效果展示 先看看这是不是需要的效果^_^ 如图,Elem ...
- JVM垃圾收集器专题
垃圾收集器:利用垃圾收集算法,实现垃圾回收的实践落地. 1 HotSpot垃圾回收器 HotSpot垃圾回收器有多个,可以配合使用. 1.1 垃圾回收的一些术语 术语: Stop the world ...
- linux的用户主目录(~)指向问题
最近在Ubuntu上安装rabbitmq之后,发现~目录指向出问题了,原本~指向当前shell登录的用户主目录,如下图 现在变成了这样: 登录之后进入的不是~目录,而是直接显示的主目录,而~指向的目录 ...
- MongoDB_数据模型&数据类型(四)
数据模块 传统的关系型数据库需要对表结构进行预先定义和严格的要求,而这样的严格要求,导致了处理数据的过程更加烦琐,甚至降低了执行效率. 在数据量达到一定规模的情况下,传统关系型数据库反应迟钝,想解决这 ...
- Git_同一个本地仓库上传到不同的远端仓库(github、gitee)
一.背景 github访问.推拉代码都太慢了,于是想把github上面的项目全部迁移到gitee(码云)上,但又不想放弃在github上维护项目,于是想同时维护两个远端仓库 二.准备工作 1.创建相同 ...
- JMeter_使用正则和JSON提取器参数化(常用于提取token)
一.使用正则表达式提取器提取token 查看登录响应参数找出token.图中token为 "ticketString": "ccf26b17-a96f-4913-8925 ...
- 设置Linux的一些文本输出方式
更新一下yum咯 yum install -y epel-release 火车 sudo yum install sl $ sl 放火 sudo yum install libaa-bin 小老鼠 s ...
- kubeadm 安装Kubernetes 1.16.3 (CentOS7+IPVS+Calico)
目录 · . 一.更新系统内核(全部节点) · . 二.基础环境设置(全部节点) · . 1.修改 Host · . 2.修改 Hostname · . 3.主机时间同步 · . 4.关闭 ...
- Jeesite富文本编辑框ckeditor显示错误
Jeesite富文本编辑框ckeditor显示错误 原文链接:https://www.toutiao.com/i6485135618190869005/ Jeesite中Control都会继承一个Ba ...
- windows server 服务器安装jenkins 并通过git拉取代码实现自动发布到IIS
Jenkins是一个开源软件,可以通过一定的配置进行自动构建,测试,部署等功能. 首先,服务器应安装好 .NET Core环境和JDK, 下载Jenkins安装包 https://www.jenkin ...