使用 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>
我正在将项目从 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”属性。
https://i.stack.imgur.com/Er7D7.png
我认为这与 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中的compiler plugin中设置想要的编译器级别,重新导入,而不是尝试在module settings中设置。
有两种方法可以做到这一点,在 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
在项目结构 > 项目中:Java 版本应为 1.8
在 pom 文件中,上面的响应中指定了相同的更改
在设置 > Java 编译器 > 将字节码版本更改为 8
在 Settings > maven > importing > JDK for importer 应该是 1.8
由于使用 Dropwizard 构建微服务,我在这个问题上遇到了很多困难。最终我发现我的构建属性位于错误的 pom 文件(主服务的 pom.xml
)中。
因此,即使其他包更像库,我也无法使用 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 文件夹并将模块导入 IntelliJ,并从更新的 pom 重新导入。当我从更新的 POM 重新导入模块时,我可以看到 iml 文件具有更新的 JDK 版本(在我的情况下为 1_7)。
除了 setting the maven build properties、adding the maven-compiler-plugin 和 modifying the Java version in the .iml file 之外,我还必须执行一个额外的步骤。 (每个都记录在其他答案中)。您还必须set the compiler version in the settings。
问题:预期的 Java 版本:11 但卡在版本:8
我尝试了几乎所有的答案,但我仍然坚持使用 language_level 8,在我的项目或 Intellij IDE 中没有找到任何可能与 Java 版本 8 相关的跟踪。
然后我探索了父级的pom.xml,没有成功,但是在祖父级的pom.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>
不定期副业成功案例分享
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>