Intellij - Não é possível usar as classes Java 8 mais recentes - Erro: "Uso da API documentado como @since 1.6+ .."

168

Estou tentando usar um java.lang.function.Functionna minha base de código java 8, mas continuo recebendo o seguinte erro no Intellij.

Uso da API documentada como @since 1.6+ Esta inspeção encontra todos os usos de métodos que possuem a tag @since em sua documentação. Isso pode ser útil quando o desenvolvimento é executado na versão mais recente do SDK como a plataforma de destino para produção

Parece que tenho as configurações corretas de projeto e compilador

Configurações do projeto: (Arquivo -> Estrutura do projeto)

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

Configurações do compilador: (Arquivo -> Configurações)

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

Qual é o problema?

Nerrve
fonte

Respostas:

365

Editou a resposta com base no comentário de Bastien Jansen.

Parece que há outra configuração de projeto que afeta o nível do compilador. Uma indicação sutil desse problema é quando o compilador começa a reclamar que a versão java de origem e destino é diferente daquela especificada durante a compilação do código

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.

Para se livrar disso, você precisa abrir

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

e mude para o nível desejado, ou seja, 1,8 ou o nível de idioma padrão do projeto

Nerrve
fonte
6
Nas configurações do projeto, você deve configurar cada módulo para usar o Project defaultnível de idioma (na Sourcesguia).
Bastien Jansen
@BastienJansen thanks. Editou a resposta com base em seus comentários!
Nerrve
7
Project Settingsé encontrado emFile -> Project Structure
Karl
6
Por que isso precisa ser definido em tantos lugares está além de mim. Obrigado.
Richard Rast
1
Essa configuração do projeto é substituída quando você reimporta se estiver usando o Maven. Isso acontece toda vez que você muda o pom e rapidamente o frustra, mantendo suas configurações intelectuais atualizadas. Para projetos Maven, as mudanças de pom abaixo são mais apropriadas.
Jay
51

Se você estiver usando o maven, adicione a linha abaixo no arquivo pom.xml de configuração e reimporte ou construa-o a partir do 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>

Caso contrário, selecione o compilador java e o nível de idioma abaixo do caminho.

Arquivo> Estrutura do projeto> Configurações do projeto> Módulos> nome do seu módulo> Fontes> Nível de idioma> escolha o que você precisa.

insira a descrição da imagem aqui

Altere o nível do idioma a partir daqui: -

insira a descrição da imagem aqui

Ajay Kumar
fonte
1
Muito obrigado por isso. Não sei por que isso não é o padrão. Mesmo em 2019.1.3 que estou usando.
eodeluga
33

Na verdade, se você estiver usando o Maven e as pom.xmlpropriedades do seu projeto estiverem configuradas corretamente

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

Você pode reimportar os parâmetros do Maven para o intellij-ideaprojeto - clique com o botão direito do mouse na entrada raiz do projeto e depois Maven -> Reimportna parte inferior.

A figura mostra que o Maven é o segundo do último item no menu do projeto.

Boris Treukhov
fonte
25

Eu apenas o corrigi da seguinte maneira:

Clique com o botão direito do mouse no projeto -> Abrir Configurações do Módulo -> Módulos -> Fontes -> 8 ou superior

insira a descrição da imagem aqui

E depois

insira a descrição da imagem aqui

Se ainda encontrar o erro e usar o maven , você precisará adicionar a configuração de compilação no seu 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>
Hearen
fonte
4

Arquivo> Configurações> Compilação, Execução, Implantação> Java Compiler

Altere a versão de bytecode de destino para 1.8 do módulo em que você está trabalhando.

Se você estiver usando o Maven

Adicione o plug-in do compilador ao pom.xml no nó do projeto de nível superior:

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

harun ugur
fonte
1

Se você estiver usando o Gradle, não se esqueça de verificar se o seguinte está definido como 1.8 e não 1.5 (por exemplo, por algum motivo bizarro no Intelij, o padrão é 1.5); portanto, não importa o que você faça no nível do projeto para definir o compilador nível de compatibilidade, essa configuração fará com que ela continue causando problemas com os recursos do Java 8 que ela não reconheceria:

version '1.0-SNAPSHOT'

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

sourceCompatibility = 1.8
Beezer
fonte
1

Talvez sua configuração do repositório possua propriedades como Versão do compilador. examinar settings.xmlarquivo.

<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>
刘泽森
fonte
1

Há um outro lugar que pode estar causando esse problema, independentemente de você estar ou não usando o Maven ou o Gradle.

Em Settings | Editor | Inspections | Java language level migration aids | Usages of API which isn't available at the configured language level, o padrão (acredito) está definido como Respecting to project language level settings, mas pode ser definido como Higher than:, o que ignora as configurações do projeto.

Isso significa que, se você seguir as instruções nas outras respostas e definir o nível de idioma do seu projeto como, digamos, 8, mas a inspeção estiver definida como Higher than: 7, o IDEA ainda será adequado.

Cody S
fonte