使用指定JDK版本进行编译及Ant相关配置 |
您所在的位置:网站首页 › ant编译项目 › 使用指定JDK版本进行编译及Ant相关配置 |
目录
1. 分析异常1.1 环境分析1.2 异常字面分析
2. 解决思路2.1 修改源码编译时使用的JDK版本2.2 处理结果
最近搞的一个项目,是使用Ant进行编译和打包的,发布到Linux服务器的Tomcat下运行。tomcat启动后,观察日志发现以下异常Unsupported major.minor version 52.0,项目无法访问。 本地开发环境 Ant 版本:1.9.15JAVA环境:1.8.0_241 服务器环境JAVA环境:1.7.0_80tomcat版本:7.0.90在本地使用Ant进行源码编译,并打war包,发布到服务器上的tomcat下运行。 1.2 异常字面分析Unsupported major.minor version 52.0,意思就是服务器上的jdk1.7,在加载编译好的Class文件的时候,发现Class文件版本是52.0,无法支持这个版本。有如下的问题需要逐个明确 52.0这个版本是哪来的? 我们在使用某一个JDK版本,使用javac命令进行编译的时候,生成的Class文件中会对编译的时使用的JDK版本进行标记的。这个52.0就是标记,标记与JDK版本是有一个对应关系的,具体如下: Java SE 8 = 52, Java SE 7 = 51, Java SE 6.0 = 50, Java SE 5.0 = 49, JDK 1.4 = 48, JDK 1.3 = 47, JDK 1.2 = 46, JDK 1.1 = 45 通过这个对应关系,就可以分析出,要加载的Class文件是使用JDK8编译的。 如果我们不知道Class是哪个版本的JDK编译的,如何主动去查询? 使用javap -v User.java命令:![]() 实际上就是增加了javac的两个参数,ant底层也是使用的javac命令实现编译的,那么target和source这两个参数的区别是什么呢? source:指定用哪个版本的编译器对java源码进行编译 target:指定生成的class文件将保证和哪个版本的虚拟机进行兼容 这里有值得注意的点,通过source和target指定的jdk版本,只能小于等于系统安装的jdk版本。 比如系统安装的是1.8,那么可以指定1.8、1.7、1.6、1.5都可以。但是系统安装的是1.7,如果指定的是1.8,那么就会报错![]() 修改完配置后,执行ant命令,然后发布到服务器上的tomcat下,启动成功。 我们看一下,现在Class中的编译版本标识,已经改为51了,也就是1.7编译了 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |