BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

从Java 9开始,javac的-target和-source命令将不再支持1.5/5及更早版本

| 作者 Alex Blewitt 关注 4 他的粉丝 ,译者 臧秀涛 关注 2 他的粉丝 发布于 2013年7月2日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

最近有一项面向Java 8和Java 9的JDK增强提案(JDK Enhancement Proposal),即JEP 182,意在为Java编译器所使用的-target和-source命令的支持模型制订相关规则。该提案建议,除当前版本外,Java编译器最多支持3个更早的版本。

-target标志允许编译器生成特定版本的Java类文件格式。尽管我们通常指定的是Java版本,比如1.5/5或1.6/6,但是该选项实际上会被翻译为生成的类文件中所使用的字节码版本号:

  • 48Java 4
  • 49Java 5
  • 50Java 6
  • 51Java 7
  • 52Java 8(尚未发布)
  • 53Java 9(尚未发布)

-source标志允许编译器将新的语言构造(如Lambda表达式、try-with-resources以及switch中使用字符串等等)看做错误。一些新语言特性(比如Lambda表达式)需要使用特定的字节码功能(比如invokedynamic),因此,-source指定的版本比-target指定的版本还新往往是不可能的。

JEP 182阐明,在Java 9及以后的版本中,javac的-target和-source最多支持更早的3个版本。Java 6的产品周期已于今年年初终止,因此Java 8编译器的限制是仅向前支持到Java 6,这种限制应该不会给人们带来重大影响。然而,如果没有特别说明,有些构建工具(比如Maven)默认兼容的源代码版本是1.5/5,可能需要加以更新才能在Java 8上运行。而Java 9则支持1.9/9、1.8/8、1.7/7和1.6/6。

变化已经开始,Java 8的-target不再接受jsr14和1.4等选项。如果-source和-target指定的选项是1.5/5或更早版本,编译器会发出警告。Java 9在发布时将不再支持1.5/5。

从实践的角度看,这一变化看上去不算很大。但是直到最近,OSGi运行时一直是使用“-source 1.5 -target jsr14”来编译的,这样源代码可以包含泛型,但是生成的字节码却能兼容J2ME。Eclipse代码库中去年已经删除了使用jsr14的地方。因为Android几乎已经消灭了J2ME (但是不管怎么说,只要像Felix和Equinox 这样的OSGi运行时还有用,对J2ME的商业需求就仍然存在) ,所以对大多数Java 开发者而言,使用较新的运行时来编译应该不是问题。

查看英文原文:Java 9 to Drop Support for Compiling 1.5 and Older Source Code

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT