问题描述
我刚刚发现,仅使用<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不应太过费力地自行找出东西,以免引起更多混乱。