代码之家  ›  专栏  ›  技术社区  ›  Igor Konoplyanko

是否有实际的理由来强制执行JDK版本的构建?

  •  3
  • Igor Konoplyanko  · 技术社区  · 7 年前

    maven enforcer plugin 它可以强制构建只在特定JDK版本上运行。

    我想知道有没有什么实际的理由可以这样做?

    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>
    

    UPD。 问题更多的是关于编译版本8的java源/目标项目和JDK的版本8、9、10或11是否有实际的区别。。。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Tomasz Linkowski    7 年前

    这样做的主要原因可能是在较新的JDK编译器中进行了一些更好的优化。所以即使目标字节码 数量

    According to Brian Goetz ,这会增加它的重量:

    有时,JVM的改进使得从源代码到字节码的更好转换成为可能。比如说在五号之前,, Foo.class 被翻译成反思的呼唤;之后,向最不发达国家提供援助。

    因此,您可能有理由在整个组织中坚持使用给定的语言级别(因为共享代码),但特定的应用程序仍然可以利用VM的改进。


    :对不起!引用的tweet是关于使用源代码编译的 超过目标(例如:。 -source 8 -target 11 ),所以这与OP询问的内容不同。尽管如此,也许更新的编译器可以生成更好的字节码,即使目标保持不变。


    Basil javac --release flag

        2
  •  3
  •   GhostCat    7 年前

    一点也不。 来源 目标

    因此:强制使用jdk会阻止您使用在目标版本之后添加到Java中的类。

        3
  •  1
  •   kai    7 年前

    有很多原因。我要指出的一点是在企业环境中部署。

    Botomline是:在企业中,可用的Java版本非常有限,通常不是最前沿的。

    因此,能够告诉编译器目标版本有助于创建一个能够并且将实际使用的应用程序(并且不会在用户机器上崩溃)。