IntelliJ是否不将Maven的<release>用于目标字节代码级别?

问题描述

我刚刚发现,仅使用<release>配置maven-compiler-plugin时,IntelliJ表现得很奇怪:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.0</version>
  <configuration>
    <release>14</release>
  </configuration>
</plugin>

作为重新加载Maven项目之后的结果,在“ Java编译器”首选项中,它显示目标字节码级别8而不是预期的14。我猜想是因为这些模块尚未使用任何Java 14功能

请参阅首选项屏幕截图:https://imgur.com/a/uKfwbfF

相比之下,在添加<source><target>时,IDE会正确配置自己的配置。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.0</version>
  <configuration>
    <source>14</source>
    <target>14</target>
  </configuration>
</plugin>

请参阅首选项屏幕截图:https://imgur.com/a/uKfwbfF

据我了解,javac --release选项比仅定义-source-target更为可靠,因为它另外将-bootclasspath选项设置为正确级别(已用this SO post复选)。因此在我看来,完全依赖此选项是一种更好的做法。

是否需要执行另一个配置步骤才能使IntelliJ正确设置首选项,而无需声明较旧的参数?

解决方法

我仔细研究了这个问题,发现在一个父poms中,某个maven-compiler-plugin已添加到<pluginManagement>中,而该maven-property从未为该配置设置。 / p>

即使我重写了子pom中的插件配置,这似乎也导致IntelliJ从语言级别进行推断。

我猜这是可以接受的行为,因为如果父pom错误,则IntelliJ不应太过费力地自行找出东西,以免引起更多混乱。