IntelliJ子模块目标平台判定规则及Maven配置Kotlin JVM版本方法
问题解答
1. Kotlin目标平台值如何由pom.xml决定?
Kotlin的编译目标平台由kotlin-maven-plugin的专属配置控制,和Maven原生的maven.compiler.source/maven.compiler.target参数相互独立:
- 若未在pom中显式配置Kotlin插件的
jvmTarget参数,插件会使用自身内置的默认值(旧版本插件默认JVM目标为1.8)。 - 根pom中设置的Java编译参数仅作用于Java代码编译,不会自动同步给Kotlin插件,这就是子模块Kotlin目标平台显示1.8的核心原因。
2. 配置Maven让子模块Kotlin使用指定JVM版本
推荐通过根pom的pluginManagement统一配置Kotlin插件,让所有子模块自动继承配置,步骤如下:
步骤1:在根pom中统一配置kotlin-maven-plugin
在根pom的<build>节点下添加pluginManagement,指定Kotlin插件的JVM目标版本为11:
<build> <pluginManagement> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <!-- 指定支持JDK11的插件版本,建议用最新稳定版 --> <version>1.9.20</version> <executions> <execution> <id>compile</id> <goals> <goal>compile</goal> </goals> <configuration> <jvmTarget>11</jvmTarget> </configuration> </execution> <execution> <id>test-compile</id> <goals> <goal>test-compile</goal> </goals> <configuration> <jvmTarget>11</jvmTarget> </configuration> </execution> </executions> </plugin> </plugins> </pluginManagement> </build>
步骤2:子模块中引用插件(无需重复配置)
在每个子模块的<build>节点下添加Kotlin插件引用即可,会自动继承根pom的配置:
<build> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> </plugin> </plugins> </build>
可选方案:用属性统一管理版本
也可以在根pom的<properties>中定义全局属性,再在插件中引用,方便后续统一修改:
根pom的properties:
<properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <kotlin.jvmTarget>11</kotlin.jvmTarget> <kotlin.plugin.version>1.9.20</kotlin.plugin.version> </properties>
然后在根pom的pluginManagement中引用属性:
<configuration> <jvmTarget>${kotlin.jvmTarget}</jvmTarget> </configuration> <version>${kotlin.plugin.version}</version>
配置完成后,在IntelliJ中执行Maven重新导入,子模块的Kotlin目标平台就会自动同步为Java11,且不会再恢复为1.8。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

