你可能遇到很多次这种情况

你可以想想,项目中pom.xml文件里的JDK版本,Maven里的JDK版本,project structure里的JDK版本,到底是什么关系

pom.xml

 <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <maven.compiler.release>17</maven.compiler.release>
 </properties>

只是一个标准规范

  • 定义你写的代码语法和 class 文件要求的版本

  • 告诉编译官:“我的代码是用 Java 17 写的,你必须用 17 或更高来编译”

Maven

Maven有两大作用,1是项目的依赖管理,另一个就是构建和编译管理。所以说Maven是包含javac的,这里的JDK版本就是将java文件编译为class文件,所以这里必须和pom.xml里保持一致,或者大于

structure

他也存在Javac,但是他还包括JVM的版本。在编译成class文件后,还要经过JVM才可以运行嘛,所以structure的版本也要保持一致

问题1

如果maven版本不对,但是structure和pom.xml文件里的JDK一致,那么可以运行嘛?

可以!!!

因为如果直接点击运行,他的javac是走structure里的。

但是如果你单独点击maven complie,就需要保证maven的JDK也保持一致

比较是偷走幸福的小偷