IDEA中JavaCompiler和ProjectStructure里配置的java版本用途区别

前几天我项目切换分支后,idea重新加载maven模块,结果全都编译失败。

先是提示没有设置模块jdk,我就进到Project Structure里面设置了jdk8

设置后没有提示语法错误,但编译还是通不过只

只要代码里面用到了1.8新增的函数,就会有提示,虽然我确定是设置好jdk版本号是1.8了

最后点来点去,才发现JavaCompiler的jdk版本配置成1.5,改回8就可以了

这不禁让我有些疑问,怎么idea有两个地方配置jdk版本,区别是什么

问了AI,回答是这样的:

配置入口

作用范围

优先级

控制内容

Project StructureProject

全局项目级(所有模块继承)

基础优先级(低 → 高)

项目 SDK、语言级别(-source

Project StructureModules

单个模块级(覆盖项目级)

模块级(高于项目级)

模块 SDK、依赖、源码目录

Java Compiler

编译字节码版本(-target

编译参数级(最高)

字节码版本、编译器选项

不过一个个模块修改配置还是有些麻烦,后来我发现:

只要在顶层的pom.xml里面加上这段配置,然后重新装载maven模块即可


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- 指定源版本,即使用的 Java 语言版本,这里设置为 1.8,表示使用 JDK 8 的语法 -->
                    <source>1.8</source>
                    <!-- 指定目标版本,即编译生成的字节码适配的 Java 运行环境版本,这里设置为 1.8,表示生成的字节码能在 JDK 8 及以上版本运行 -->
                    <target>1.8</target>
                    <!-- 可以根据需要添加额外的编译参数,比如开启更多的警告信息 -->
                    <compilerArgs>
                        <arg>-Xlint:all</arg>
                    </compilerArgs>
                    <!-- 可以指定编译器的路径,确保使用正确的 JDK 进行编译,若不指定,Maven 会使用系统环境变量中配置的 JDK -->
                    <!-- <compilerPath>C:\Program Files\Java\jdk1.8.0_91\bin\javac</compilerPath> -->
                </configuration>
            </plugin>
        </plugins>
    </build>


原因是idea默认会认为项目的目标字节码版本是1.5,但如果在pom里面有明确配置,则按pom的来