java项目的jdk版本到底是啥,傻傻分不清
在开发项目时,我经常能看到四个选择jdk的地方,我一直不知道他们都是什么作用,使用是都把他们设置成一样的:
idea -> file -> project structure -> project-sdk
idea -> file -> project structure -> platform seetings -> sdks
pom.xml文件中:
<properties>
<java.version>8</java.version>
</properties>
pom.xml文件中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
区别:
- IntelliJ IDEA 设置:
File
→Project Structure
→Project SDK
这是在 IntelliJ IDEA 中为整个项目指定 Java 开发工具包(SDK)的途径。选择的 SDK 决定了 IDEA 在编译、运行和调试项目时使用的 Java 版本。这里的设置直接影响到 IDE 的代码提示、语法检查、代码补全、代码分析等功能是否与选定的 Java 版本兼容。此外,IDEA 也会依据此设置来构建项目、运行单元测试等。
- IntelliJ IDEA 设置:
File
→Project Structure
→Platform Settings
→SDKs
这一部分是 IDEA 管理全局可用的 SDK 列表。在这里,您可以添加、删除、编辑各种类型的 SDK(包括 Java、Android、Python 等),并指定它们的位置。设置项目 SDK 时,会从这个列表中选择一个已有的 Java SDK。这里的操作不会直接影响单个项目,而是影响所有使用 IDEA 的项目。
pom.xml
文件中的<properties><java.version>8</java.version></properties>
在 Maven 项目中,<properties>
标签内的 java.version
属性是一种约定俗成的变量名,用于表示项目期望使用的 Java 版本。通常,这个属性值会被其他插件或配置引用,比如在 <maven-compiler-plugin>
的配置中。这样做有利于保持版本信息的统一和易于维护。单独设置 java.version
不会直接改变项目的编译行为,它需要与其他配置配合使用。
pom.xml
文件中的maven-compiler-plugin
配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
这是明确指定 Maven 编译项目的源代码和目标字节码所使用的 Java 版本。<source>
指定源代码兼容的最低 Java 版本,<target>
指定生成的目标字节码所遵循的 Java 版本。当执行 mvn compile
命令时,Maven 会根据这个插件的配置来编译项目。即使 IntelliJ IDEA 中设置了不同的项目 SDK,直接通过 Maven 构建时仍会使用此处指定的版本。
实际运行时使用哪个版本?
-
在 IntelliJ IDEA 中:当您使用 IDEA 的内置构建工具(如 Build、Rebuild、Make)或运行/调试功能时,IDE 会优先使用您在
Project Structure
→Project SDK
中指定的 Java 版本来编译和运行项目。这意味着即使pom.xml
中配置了不同的 Java 版本,IDEA 内部操作仍可能使用您指定的 SDK 版本。 -
通过 Maven 构建:当您在命令行或通过 IDEA 中的 Maven 插件执行
mvn compile
、mvn package
、mvn install
等命令时,Maven 会根据maven-compiler-plugin
的配置(如上面示例所示)来编译项目。此时,项目实际使用的 Java 版本由maven-compiler-plugin
的<source>
和<target>
配置决定,不受 IDEA 中项目 SDK 设置的影响。
总结:
- IDEA 设置(
Project SDK
和Platform Settings
→SDKs
)影响 IntelliJ IDEA 内部编译和运行项目的行为。 - Maven
pom.xml
中的配置(特别是maven-compiler-plugin
)决定了在使用 Maven 命令行或插件构建项目时的 Java 版本。
实际运行时使用哪个版本,取决于是通过 IntelliJ IDEA 的内置工具还是通过 Maven 命令行/插件来编译和运行项目。为了确保一致性,还是和我一开始说的在 IDEA 设置和 pom.xml
中均指定相同的 Java 版本就行了。