Intellij-无法使用较新的Java 8类-错误:“ API的使用记录为@@ 1.6起。”


168

我正在尝试java.lang.function.Function在Java 8代码库中使用A,但在Intellij中却不断收到以下错误。

API的使用记录为@since 1.6+起此检查将发现其文档中具有@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

问题是什么?

Answers:


365

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

似乎还有另一个项目设置会影响编译器级别。此问题的一个细微指示是,当编译器开始抱怨源Java版本和目标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或项目默认语言级别


6
在项目设置中,应将每个模块配置为使用Project default语言级别(在Sources选项卡中)。
Bastien Jansen

@BastienJansen谢谢。根据您的评论编辑了答案!
Nerrve

7
Project Settings发现于File -> Project Structure
Karl

6
为什么需要在如此多的地方进行设置,这超出了我的范围。谢谢。
理查德·拉斯特

1
如果使用Maven,则在重新导入时将覆盖此项目设置。每当您更改pom时都会发生这种情况,这会使您不得不及时更新intellij设置而感到沮丧。对于Maven项目,以下pom更改更合适。
杰伊,

51

如果使用的是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>

否则,请从下面的路径中选择Java编译器和Language Level。

文件>项目结构>项目设置>模块>模块名称>源>语言级别>选择所需的一种。

在此处输入图片说明

从此处更改语言级别:-

在此处输入图片说明


1
非常感谢你做的这些。不知道为什么这不是默认设置。即使在我正在使用的2019.1.3中。
eodeluga

33

实际上,如果您使用的是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在底部。

图为Maven在项目右键菜单中位于倒数第二个


25

我只是将其修复如下:

右键单击项目->打开模块设置->模块->源-> 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>

4

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

将目标字节码版本更改为您正在使用的模块的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>


1

如果您使用的是Gradle,请不要忘记确保将以下参数设置为1.8而不是1.5(例如,出于Intelij的某些奇怪原因,它默认设置为1.5),所以无论您在项目级别做什么来设置编译器兼容性级别,此设置将导致它继续给您带来无法识别的Java 8功能的麻烦:

version '1.0-SNAPSHOT'

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

sourceCompatibility = 1.8

1

也许您的存储库配置具有包括编译器版本的属性。检查 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>

1

不管您是否使用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仍然适合。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.