微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 是否有实际的推理来强制构建JDK版本?

存在 maven enforcer plugin可以强制构建仅在特定JDK版本上运行.

我想知道是否有任何实际的推理?
我们已经构建了配置来指定源版本和目标版本.据我所知,这应该是绰绰有余的,因为Java是向后兼容的.例如它在gradle中的外观:

compileJava   {
  sourceCompatibility = '1.8'
  targetCompatibility = '1.8'
}

这就是它在maven中的样子:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

如果你有任何理由需要精确的jdk版本 – 请你写下来.

UPD.
问题更多的是如果用JDK的8,9,10或11编译java源/目标版本8的项目是否有任何实际差异…

解决方法

这样做的主要原因可能是在较新的JDK的编译器中进行了一些更好的优化.因此,即使目标字节码级别与旧编译器相同,目标字节码本身也可能会得到改进.

According to Brian Goetz,这拉动了它的重量:

There are times when a better translation from source code to bytecode is made possible by JVM improvements. For example,prior to 5,Foo.class was translated to reflective call; after,to LDC.

So,you may reasonably want to stick to a given language level across an org (because of shared code) but specific apps can still take advantage of VM improvements.

编辑:对不起!引用的推文是关于使用低于目标的源进行编译(例如-source 8 -target 11),因此它与OP所询问的不同.尽管如此,即使目标保持不变,也许较新的编译器可以产生更好的字节码.

PS.正如Basil所告知的那样,让我提一下JDK 9的javac --release flag,它可以防止在坚持使用较旧的语言级别时使用较新的JDK的API.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐