JDK -source -target

公司有2套JDK编译环境,一个是1.6,一个是1.4

运行时环境都是一样的, Tomcat 6 + JRE 1.6

实际问题是开发过程中经常碰到开发提交的代码本地是编译ok的,但是QA编译机编译不通过.

问题就出在环境里JDK版本不同上.


开发机: JDK 1.6.

编译脚本:

<javac debug="on" encoding="UTF-8" deprecation="on" source="1.4" target="1.4" destdir="${build.dir}">

QA编译机: JDK 1.4

<javac debug="on" encoding="UTF-8" deprecation="on" destdir="${build.dir}">

原以为两者是等价的,其实完全不一样.

JDK1.4的不能识别用1.6编译的jar,所以一旦需要编译的java源文件引用到了1.6的jar,编译就不通过.


解决方法: 凡是旧的环境, 需要用JDK1.4编译的, 依赖jar也都必须是1.4编译出来的.


同时也研究了下JDK编译 -source -target的具体含义:

-source 确认编译语言的语法,比如设置为1.4则1.5的新特性比如泛型都不能用,编译不通过

-target 确定最低兼容的VM版本, 设置-source=1.6 -target=1.4 可以让JDK1.6编译出来的class/jar运行在JRE1.4环境. (注意target版本必须高于source)


但这是不保险的,如果VM真的是1.4,还是建议用JDK1.4编译

比如BigDecimal是JDk1.5的,但是仍然可以通过-target编译出来.


查看class的jdk版本

打开二进制的.class文件,查看头部第8个byte:

CA FE BA BE 00 00 00 30

0x2D45JDK 1.1
0x2E46JDK 1.2
0x2F47JDK 1.3
0x3048JDK 1.4
0x3149J2SE 5.0
0x3250J2SE 6.0
0x3351J2SE 7
0x3452J2SE 8



参考文章:

javac - Java programming language compiler

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html

Java class file

http://en.wikipedia.org/wiki/Java_class_file

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值