繁体   English   中英

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

[英]stop IntelliJ IDEA to switch java language level every time the pom is reloaded (or change the default project language level)

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

我可以将语言级别更改为 8.0(F4 -> 模块 -> 语言级别)但是每次我编辑我的 pom.xml 项目级别都会切换回“使用项目语言级别”,我必须再次编辑此设置并且再次。

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

根据马克的评论,这是如何做到的:

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

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 11 下的“JDK for importer”属性。

在此处输入图片说明

有两种方法可以做到这一点,在 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>

如果有帮助,请告诉我。

在我的情况下,所有解决方案都没有帮助。 我不需要在我的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 版本。

为我解决问题的是更新列表:

  • 在项目结构>模块中:将语言级别 Java 版本更改为 8
  • 在 Project Structure > Project: Java 版本应该是 1.8
  • 在 pom 文件中,上面的响应中指定了相同的更改
  • 在设置 > Java 编译器 > 将字节码版本更改为 8
  • 在设置 > maven > 导入 > 导入器的 JDK 应该是 1.8

由于使用 Dropwizard 构建微服务,我在这个问题上挣扎了很多。 最终我发现我在错误的pom文件(主服务的pom.xml )中有我的构建属性。

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

当我将构建插件重构为“全局” .pom.xml文件时,所有子容器都能够使用新语法。

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

谢谢它的工作原理。

小心不要犯和我一样的错误。

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

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

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

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

除了设置 maven 构建属性添加 maven-compiler-plugin修改 .iml 文件中的 Java 版本之外,我还必须执行一个额外的步骤。 (每个都记录在其他答案中)。 您还必须在设置中设置编译器版本

问题:预期 Java 版本:11 但停留在版本:8

  • 我尝试了几乎所有的答案,但我仍然被language_level 8卡住,在我的项目或 Intellij IDE 中无处可寻,我发现任何可能与 Java 版本 8 相关的痕迹。

  • 然后我探索了parentpom.xml没有成功但是在grand-parentpom.xml中,我发现发布版本是8。

解决方案:在属性中添加以下 3 行会有所不同。

<properties>
  <maven.compiler.source>11</maven.compiler.source>
  <maven.compiler.target>11</maven.compiler.target>
  <maven.compiler.release>11</maven.compiler.release>
</properties>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM