Intellij-无法使用较新的 Java8类-错误: “从1.6 + . . 开始使用记录为@的 API. .”

我试图在 java 8代码库中使用一个 java.lang.function.Function,但是在 Intellij 总是出现以下错误。

自1.6 + 以来记录为@的 API 的使用情况 使用文档中带有@since 标记的方法 当在较新的 SDK 版本下执行开发时,可能有用 生产的目标平台

我似乎有正确的项目和编译器设置

项目设置: (文件-> 项目结构)

Project Settings -> Project -> Project SDK = Java 1.8
Project Settings -> Project -> Project Language Level = 8 - Lambdas, Type Annotations etc

编译器设置: (文件-> 设置)

Build, Execution, Deployment -> Compiler -> Java Compiler -> Project Bytecode Version : 1.8
Build, Execution, Deployment -> Compiler -> Java Compiler -> Per module Bytecode Version -> Target Bytecode Version : 1.8

有什么问题吗?

107017 次浏览

根据 Bastien Jansen 的评论编辑了答案。

似乎还有另一个项目设置会影响编译器级别。当编译器开始抱怨源代码和目标 Java 版本与编译代码时指定的版本不同时,这个问题的一个微妙迹象就是

Warning:java: source value 1.5 is obsolete and will be removed in a future release
Warning:java: target value 1.5 is obsolete and will be removed in a future release
Warning:java: To suppress warnings about obsolete options, use -Xlint:-options.

为了摆脱这一切,你需要敞开心扉

File -> Project Structure -> Project Settings -> Modules -> "Your Module Name" -> Sources -> Language Level

并将其更改为所需的级别,即1.8或 ProjectDefault 语言级别

实际上,如果您正在使用 Maven,并且您的 pom.xml项目属性配置正确

<project xmlns="...>
....
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
</project

您可以将 Maven 参数重新导入到 intellij-idea项目-右键单击项目根条目,然后单击底部的 Maven -> Reimport

picture shows that Maven is second from last item in project right click menu

如果您正在使用 maven,那么在配置 Pom.xml文件中添加以下一行,然后从 maven 重新导入或构建它。

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

Else 从下面的路径中选择 java 编译器和 Language Level。

文件 > 项目结构 > 项目设置 > 模块 > 模块名称 > 资源 > 语言级别 > 选择你需要的。

enter image description here

从这里更改语言级别:-

enter image description here

文件 > 设置 > 构建、执行、部署 > Java 编译器

将 Target 字节码版本更改为您正在使用的模块的1.8版本。

如果你在使用 Maven

在顶级项目节点下将编译器插件添加到 pom.xml:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

如果你正在使用 Gradle,不要忘记确保下面的设置是1.8而不是1.5(例如,在 Intelij,由于某些奇怪的原因,它默认为1.5) ,所以不管你在项目级别做什么来设置编译器兼容性级别,这个设置都会导致它继续给你带来不能识别的 Java 8特性的麻烦:

version '1.0-SNAPSHOT'


apply plugin: 'groovy'
apply plugin: 'java'


sourceCompatibility = 1.8

也许您的存储库配置具有包含编译器版本的属性 settings.xml文件。

<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>

还有一个地方可能会导致这个问题,不管你是否使用 Maven 或 Gradle。

Settings | Editor | Inspections | Java language level migration aids | Usages of API which isn't available at the configured language level中,默认值(我相信)被设置为 Respecting to project language level settings,但是它的 可以被设置为 Higher than:,这忽略了项目设置。

这意味着,如果你按照其他答案中的说明,将项目的语言水平设置为,比如说,8,但检查设置为 Higher than: 7,IDEA 仍然会大发雷霆。

我只是修改了一下:

右键单击项目-> 打开模块设置-> 模块-> 资源-> 8或更高

enter image description here

然后

enter image description here

如果仍然遇到错误并使用 Maven,则必须在 pom.xml中添加构建配置:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>