Intellij - No se pueden usar las nuevas clases de Java 8 - Error: "Uso de API documentado como @since 1.6+ .."

168

Estoy tratando de usar a java.lang.function.Functionen mi base de código java 8, pero sigo recibiendo el siguiente error en Intellij.

Uso de API documentado como @since 1.6+ Esta inspección encuentra todos los usos de los métodos que tienen la etiqueta @since en su documentación. Esto puede ser útil cuando el desarrollo se realiza con la versión más reciente del SDK como plataforma de destino para la producción

Parece que tengo la configuración correcta de Proyecto y Compilador

Configuración del proyecto: (Archivo -> Estructura del proyecto)

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

Configuración del compilador: (Archivo -> Configuración)

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

¿Cuál es el problema?

Nerrve
fuente

Respuestas:

365

Editó la respuesta basada en el comentario de Bastien Jansen.

Parece que hay otra configuración de proyecto que afecta el nivel del compilador. Una indicación sutil de este problema es cuando su compilador comienza a quejarse de que la versión de Java de origen y destino es diferente de la que especificó mientras compila el 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 deshacerte de esto, debes abrir

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

y cambie eso al nivel deseado, es decir, 1.8 o el nivel de idioma predeterminado del proyecto

Nerrve
fuente
66
En la configuración del proyecto, debe configurar cada módulo para usar el Project defaultnivel de idioma (en la Sourcespestaña).
Bastien Jansen
@BastienJansen gracias. ¡Editó la respuesta basada en sus comentarios!
Nerrve
77
Project Settingsse encuentra enFile -> Project Structure
Karl
66
Por qué esto debe establecerse en tantos lugares está más allá de mí. Gracias.
Richard Rast
1
Esta configuración del proyecto se sobrescribe cuando realiza una reimportación si está utilizando Maven. Esto sucede cada vez que cambia el pom, y rápidamente le frustrará tener que mantener su configuración de inteligencia actualizada. Para los proyectos de Maven, los siguientes cambios de pom son más apropiados.
Jay
51

Si está utilizando maven, agregue la línea siguiente en su archivo de configuración pom.xml y luego vuelva a importarlo o compílelo desde 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>

De lo contrario, seleccione el compilador de Java y el Nivel de idioma de la ruta a continuación.

Archivo> Estructura del proyecto> Configuración del proyecto> Módulos> el nombre del módulo> Fuentes> Nivel de idioma> elija el que necesita.

ingrese la descripción de la imagen aquí

Cambiar el nivel de idioma desde aquí: -

ingrese la descripción de la imagen aquí

Ajay Kumar
fuente
1
Muchas gracias por esto. No sé por qué esto no es predeterminado. Incluso en 2019.1.3 que estoy usando.
eodeluga
33

En realidad, si está utilizando Maven y las pom.xmlpropiedades de su proyecto están configuradas correctamente

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

Puede volver a importar los parámetros de Maven al intellij-ideaproyecto: haga clic con el botón derecho en la entrada raíz del proyecto, Maven -> Reimportque se encuentra en la parte inferior.

la imagen muestra que Maven es el segundo desde el último elemento en el menú del botón derecho del proyecto

Boris Treukhov
fuente
25

Lo arreglé de la siguiente manera:

Haga clic derecho en el proyecto -> Abrir configuración del módulo -> Módulos -> Fuentes -> 8 o superior

ingrese la descripción de la imagen aquí

Y entonces

ingrese la descripción de la imagen aquí

Si aún encuentra el error y usa Maven , debe agregar la configuración de compilación en su 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
fuente
4

Archivo> Configuración> Compilación, ejecución, implementación> Compilador Java

Cambie la versión de código de bytes de destino a 1.8 del módulo para el que está trabajando.

Si estás usando Maven

Agregue el complemento del compilador a pom.xml en el nodo del proyecto de nivel 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
fuente
1

Si está utilizando Gradle, no olvide asegurarse de que lo siguiente esté configurado en 1.8 y no en 1.5 (por ejemplo, por alguna extraña razón en Intelij, por defecto es 1.5), así que no importa lo que haga a nivel de proyecto para configurar el compilador nivel de compatibilidad, esta configuración hará que continúe dándole problemas con las características de Java 8 que no reconocería:

version '1.0-SNAPSHOT'

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

sourceCompatibility = 1.8
Beezer
fuente
1

Tal vez su configuración de repositorio tiene propiedades que incluyen la versión del compilador. examinar el settings.xmlarchivo

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

Hay otro lugar que podría estar causando este problema, independientemente de si está utilizando Maven o Gradle.

En Settings | Editor | Inspections | Java language level migration aids | Usages of API which isn't available at the configured language level, el valor predeterminado (creo) se establece en Respecting to project language level settings, pero se puede establecer enHigher than: , que ignora la configuración del proyecto.

Lo que significa que si sigue las instrucciones en las otras respuestas y establece el nivel de idioma de su proyecto en, digamos, 8, pero la inspección está configurada en Higher than: 7, IDEA todavía tendrá un ataque.

Cody S
fuente