每次重新加载pom时,停止IntelliJ IDEA切换java语言级别(或更改默认项目语言级别)

时间:2014-11-20 10:48:11

标签: java maven intellij-idea pom.xml

使用IntelliJ 12,我有一个java项目,我使用maven和pom.xml。 我的项目使用的是java8,但在导入项目时,似乎默认的项目语言级别已设置为6。

我可以将语言级别更改为8.0(F4 - >模块 - >语言级别)但是每次编辑我的pom.xml时,项目级别都会切换回"使用项目语言级别" ,我必须一次又一次地编辑这个设置。

我是否需要添加到pom.xml以将默认语言级别设置为8.0?

10 个答案:

答案 0 :(得分:141)

根据马克的评论,以下是如何做到这一点:

<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>

答案 1 :(得分:83)

vikingsteve答案的缩短版本是:

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

答案 2 :(得分:22)

我认为这与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中的编译器插件中设置所需的编译器级别,重新导入,而不是尝试在模块设置中设置它。

答案 3 :(得分:8)

有两种方法可以在pom.xml文件中添加其中一个:

首先添加属性

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

second-添加插件

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

如果有帮助,请告诉我。

答案 4 :(得分:2)

在我的案例中,没有一个解决方案有帮助。我不需要在pom.xml中指定任何Java版本。

我需要打开<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版本。

答案 5 :(得分:2)

我正在将项目从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 11”下的'JDK for importer'属性。

enter image description here

答案 6 :(得分:1)

由于使用Dropwizard构建微服务,我在这个问题上遇到了很多困难。最后我发现我的构建属性在错误的 pom 文件中(主要服务&#39; s pom.xml)。

因此,即使其他软件包更像,我也无法使用Java 8语法。

当我将构建插件重构为&#34; global&#34; .pom.xml&#34;文件,所有子容器都能够使用新语法。

可以帮助有多容器项目问题的人

答案 7 :(得分:1)

谢谢,它有效。

小心不要犯同样的错误。

如果您有配置文件,请在正确的配置文件中添加插件。

<profiles>
    <profile>
        <id>foo</id>
        <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
        </build>
    </profile>
    <profile>
        <id>bar</id>
        .......
    </profile>
<profiles>

答案 8 :(得分:0)

对我来说,将POM(插件加属性)更新为所需的Java编译器版本(在我的情况下为1_7)的解决方案是有效的。 但是,由于每个项目的.iml文件是使用原始pom生成的(默认编译器版本为1_5,如上所述),JDK版本为1_5,这仍然会覆盖pom版本。

我手动删除了.idea文件夹,并将模块导入IntelliJ,并重新导入更新后的pom。当我从更新的POM重新导入模块时,我可以看到iml文件具有更新的JDK版本(在我的情况下为1_7)。

答案 9 :(得分:0)

除了setting the maven build propertiesadding the maven-compiler-pluginmodifying the Java version in the .iml file之外,还有一个我必须遵循的步骤。 (每个都记录在其他答案中)。您还必须set the compiler version in the settings