使用IntelliJ 12,我有一个Java项目,并且将maven与pom.xml一起使用。我的项目使用的是Java8,但似乎在导入项目时默认项目语言级别已设置为6。
我可以将语言级别更改为8.0(F4->模块->语言级别),但是每次我编辑pom.xml时,项目级别都会切换回“使用项目语言级别”,并且我必须再次编辑此设置,然后再次。
我需要添加一些东西到pom.xml来将默认语言级别设置为8.0吗?
使用IntelliJ 12,我有一个Java项目,并且将maven与pom.xml一起使用。我的项目使用的是Java8,但似乎在导入项目时默认项目语言级别已设置为6。
我可以将语言级别更改为8.0(F4->模块->语言级别),但是每次我编辑pom.xml时,项目级别都会切换回“使用项目语言级别”,并且我必须再次编辑此设置,然后再次。
我需要添加一些东西到pom.xml来将默认语言级别设置为8.0吗?
Answers:
根据Mark的评论,这是如何做的:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
vikingsteve的答案的简短版本是:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
我认为这与Maven编译器插件和IntelliJ想法之间的概念冲突有关。显然,较新版本的编译器插件的默认级别为1.5(请参阅http://maven.apache.org/plugins/maven-compiler-plugin/)。因此,如果在项目中完全使用了编译器插件,并且未在pom.xml中显式设置编译器级别,则每当重新处理POM时,该级别都将恢复为默认值。
因此,存在一个概念冲突,Intellij IDEA将忽略该冲突。IDE仍然允许人们设置项目和模块设置,但是不提供警告或反馈,表明该设置由pom.xml控制。解决方案要么是显式地允许覆盖POM编译器插件设置(可能不明智,因为在命令行上使用maven时会发生这种情况),或者是当POM的此设置生效时在IDE中停用控件。
当前的解决方案是在pom的编译器插件中设置所需的编译器级别,然后重新导入,而不是尝试在模块设置中进行设置。
我正在将项目从JDK 8升级到JDK 10+。我正确指定了编译器属性,如下所示:
<properties>
<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target>
</properties>
但是,Idea项目将继续将语言级别重置为8。
最终,我发现Idea的Maven导入过程是使用JDK 8导入项目的,从而将语言级别限制为<= 8。
要修复,我更新了“设置”->“构建,执行,部署”->“构建工具”->“ Maven”->“导入”下的“ JDK for importer”属性,以使用JDK 11。
有两种方法,将其中一种添加到pom.xml文件中:
首次添加属性
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
第二-添加插件
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
让我知道是否有帮助。
在我看来,所有解决方案均无济于事。我不需要在中指定任何Java版本pom.xml
。
我需要打开<project-name>.iml
文件并在那里更改JDK版本。
原版的:
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
<!-- ... ^ -->
<!-- ... | -->
更新:
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<!-- ... ^ -->
<!-- ... | -->
这根本没有任何意义。我从来没有为Java 1.5指定JDK版本。
对我而言,将POM(插件和属性)更新为所需的Java编译器版本(在我的情况下为1_7)的解决方案有效。但是,由于每个项目的.iml文件都是使用原始pom(如上面的某人所述,默认编译器版本为1_5)生成的,因此JDK版本为1_5,因此它仍将覆盖pom版本。
我手动删除了.idea文件夹,并将模块从更新的pom重新导入到IntelliJ中。从更新的POM重新导入模块时,我可以看到iml文件具有更新的JDK版本(在我的情况下为1_7)。
除了设置maven构建属性,添加maven-compiler-plugin以及修改.iml文件中的Java版本外,我还需要执行一个附加步骤。(每个文件均已在其他答案中记录)。您还必须在设置中设置编译器版本。