加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 08:28:41 所属栏目:Java 来源:网络整理
导读:存在 maven enforcer plugin可以强制构建仅在特定JDK版本上运行. 我想知道是否有任何实际的推理? 我们已经构建了配置来指定源版本和目标版本.据我所知,这应该是绰绰有余的,因为Java是向后兼容的.例如它在gradle中的外观: compileJava { sourceCompatibilit
存在 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读