遇到的问题:
使用IDEA导入一个Maven多模块项目遇到关于JDK和Maven版本相关的问题,这里记录一下解决办法。
如何修改当前项目JDK和Maven的版本?
修改当前项目对应Maven版本:
File -> Setting -> 搜索Maven

修改JDK版本,需要同时修改Project Structure的Project、Modlues设置和Setting设置:
File -> Project Structure -> Project (修改)->Modules(修改)->SDK(修改)



File -> Setting -> 搜索Java -> 修改所有子模块的JDK编译版本

这样,当前项目的JDK和Maven版本就修改好了,但是这样后面的新项目不会生效,还要继续修改,想要对新项目生效,就需要设置默认的版本(看下面问题2)。
如何设置默认导入一个项目时的JDK和Maven版本?
修改导入时项目的默认Maven:
2018版,路径File -> Other Setting -> Default Setting
2021版IDEA路径:File -> ...

修改默认JDK版本:
2018版,路径File -> Other Setting -> Default Project Structure
2021版IDEA路径:File -> ...


保存生效后,后面新导入的项目就会使用默认的JDK和Maven版本。但有时新导入的多模块项目的父模块使用的是默认设置JDK版本,但是子模块使用的是其他版本(看问题3)。
如何设置默认导入项目时的父模块和子模块的JDK版本?
需要在项目的pom文件中配置对应的版本
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
并且一劳永逸的方法就是修改指定的maven setting.xml配置
<profile>
<id>jdk-11</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
</properties>
</profile>
如果出现修改了JDK版本,后面又自动修改回来,可能的原因和解决方式是什么?
如果Maven Profiles这里有多个JDK版本,很可能出现修改了配置之后,又重新恢复成原来的版本的情况,这是需要检查你指定的setting.xml文件中的<profiles>是否指定了多个,或者C盘是否有默认的setting.xml文件指定了JDK版本,去掉其他不想用的那个勾选项,修改setting.xml只指定一个JDK版本的<profile>。如果都没有,清除缓存重新使用一个新项目再试试。

原理分析:
修改File -> Setting -> Java编译版本项目于修改了项目目录下的complier.xml中的<bytecodeTargetLevel>标签的版本,所以修改这个文件中的模块版本,File -> Setting -> Java编译版本也会同步修改。

修改File -> Project Structure 中的Modules编译版本,其实相当于修改了modules.xml中的JDK版本,同理,也可以批量替换这个文件中的JDK版本,相应的File -> Project Structure 中的Modules编译版本也会同步修改。

修改Maven setting.xml文件的jdk版本,相当于修改IDEA Maven的Profiles的JDK版本。

参考文档:
https://segmentfault.com/q/1010000003509821
https://blog.csdn.net/isea533/article/details/48575983