java IntelliJ与Gradle JDK版本

avwztpqn  于 2023-08-01  发布在  Java
关注(0)|答案(2)|浏览(128)

有人能解释一下Gradle的java块中指定的Java版本与IntelliJ IDEA项目结构对话框中指定的Java版本之间的区别吗?


的数据
我知道用于执行Gradle本身的JVM是在设置中指定的,所以也不是。我假设有问题的程序是在Gradle中为targetCompatibility构建的,但如果是这样的话,项目结构对话框定义了什么?

23c0lvtd

23c0lvtd1#

理论上,Gradle targetCompatibility设置与Project Structure的设置相同。
让我们来看看javac命令的输出:

--release <release>
        Compile for the specified Java SE release. Supported releases: 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
  
  --source <release>, -source <release>
        Provide source compatibility with the specified Java SE release. Supported releases: 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20

字符串
每个JDK版本都有一个发布号,通常,较高版本的JDK(以20为例)可以编译和运行所有较低版本。
但是,如果你使用的是JDK 8,你只能编译Java 8源代码级别,不能编译Java源代码级别9、10等,也只能运行Java 8类。
每个类文件都有一个内部版本号,它显示了它可以运行的最低JVM版本,这由javac --release arg值指定。
所以回到Gradle,屏幕截图表明该项目至少使用JDK 8来编译和运行它,因此IDEA将选择真实的的JDK 17来编译和运行它。当然,JDK 17可以编译和运行更新的Java源代码级别,包括Java 8。
我为这个概念画了一个小图:x1c 0d1x的数据

ztmd8pv5

ztmd8pv52#

Project Structure对话框定义了用于Intellij IDEA的Java版本,例如用于代码完成或真实的显示编译错误。简而言之,它用于编码。例如,如果您在Project Structure中选择<NO SDK>,您仍然可以运行Gradle,但无法编写代码。为了让你有机会在你想要的Java版本上编写代码,你可以在Project Structure中选择语言级别,但它仍然会用于编码,而不是使用Gradle进行编译。

相关问题