Intellij - Không thể sử dụng các lớp Java 8 mới hơn - Lỗi: Cách sử dụng API được ghi lại dưới dạng @since 1.6+ ..


168

Tôi đang cố gắng sử dụng java.lang.function.Functionmã cơ sở java 8 của mình, nhưng tôi vẫn gặp lỗi sau trong Intellij.

Việc sử dụng API được ghi lại dưới dạng @since 1.6+ Việc kiểm tra này tìm thấy tất cả các cách sử dụng các phương thức có thẻ @since trong tài liệu của họ. Điều này có thể hữu ích khi việc phát triển được thực hiện trong phiên bản SDK mới hơn làm nền tảng đích cho sản xuất

Tôi dường như có các cài đặt Project và Compiler chính xác

Cài đặt dự án: (Tệp -> Cấu trúc dự án)

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

Cài đặt trình biên dịch: (Tệp -> Cài đặt)

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

Vấn đề là gì?

Câu trả lời:


365

Chỉnh sửa câu trả lời dựa trên bình luận của Bastien Jansen.

Có vẻ như có một thiết lập dự án khác ảnh hưởng đến cấp độ trình biên dịch. Một dấu hiệu tinh tế của vấn đề này là khi trình biên dịch của bạn bắt đầu phàn nàn về phiên bản java nguồn và đích khác với phiên bản bạn đã chỉ định trong khi bạn biên dịch mã

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.

Để thoát khỏi điều này, bạn cần phải mở ra

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

và thay đổi mức đó thành mức mong muốn, tức là 1.8 hoặc cấp độ ngôn ngữ mặc định của dự án


6
Trong cài đặt dự án, bạn nên cấu hình từng mô-đun để sử dụng Project defaultcấp độ ngôn ngữ (trong Sourcestab).
Bastien Jansen

@BastienJansen cảm ơn. Chỉnh sửa câu trả lời dựa trên ý kiến ​​của bạn!
Giới thiệu

7
Project Settingsđược tìm thấy trongFile -> Project Structure
Karl

6
Tại sao điều này cần phải được đặt ở nhiều nơi là ngoài tôi. Cảm ơn.
Richard Rast

1
Cài đặt dự án này được ghi đè khi bạn nhập lại nếu bạn đang sử dụng Maven. Điều này xảy ra mỗi khi bạn thay đổi pom và sẽ nhanh chóng làm bạn nản lòng khi phải cập nhật cài đặt intellij. Đối với các dự án Maven, các thay đổi pom dưới đây là phù hợp hơn.
Jay

51

Nếu bạn đang sử dụng maven thì Thêm dòng dưới đây vào tệp pom.xml cấu hình của bạn và sau đó nhập lại hoặc xây dựng nó từ 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>

Khác chọn trình biên dịch java và cấp độ ngôn ngữ từ đường dẫn bên dưới.

Tệp> Cấu trúc dự án> Cài đặt dự án> Mô-đun> Tên mô-đun> Nguồn> Cấp độ ngôn ngữ> chọn thứ bạn cần.

nhập mô tả hình ảnh ở đây

Thay đổi cấp độ ngôn ngữ từ đây: -

nhập mô tả hình ảnh ở đây


1
Cám ơn bạn rất nhiều về điều này. Không biết tại sao điều này không mặc định. Ngay cả trong năm 2019.1.3 mà tôi đang sử dụng.
eodeluga

33

Trên thực tế, nếu bạn đang sử dụng Maven và các pom.xmlthuộc tính dự án của bạn được cấu hình đúng

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

Bạn có thể nhập lại các tham số Maven cho intellij-ideadự án - nhấp chuột phải vào mục gốc của dự án, sau Maven -> Reimportđó ở dưới cùng.

hình ảnh cho thấy Maven đứng thứ hai từ mục cuối cùng trong menu nhấp chuột phải của dự án


25

Tôi chỉ sửa nó như sau:

Nhấp chuột phải vào dự án -> Mở Cài đặt mô-đun -> Mô-đun -> Nguồn -> 8 hoặc cao hơn

nhập mô tả hình ảnh ở đây

Và sau đó

nhập mô tả hình ảnh ở đây

Nếu vẫn gặp lỗi và sử dụng maven , bạn phải thêm cấu hình bản dựng trong 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

Tệp> Cài đặt> Xây dựng, Thi hành, Triển khai> Trình biên dịch Java

Thay đổi phiên bản Target byodeode thành 1.8 của mô-đun mà bạn đang làm việc.

Nếu bạn đang sử dụng Maven

Thêm plugin trình biên dịch vào pom.xml dưới nút dự án cấp cao nhất:

<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

Nếu bạn đang sử dụng Gradle, đừng quên đảm bảo các mục sau được đặt thành 1.8 chứ không phải 1.5 (ví dụ vì một lý do kỳ quái nào đó trong Intelij, nó mặc định là 1.5) vì vậy dù bạn có làm gì ở cấp dự án để đặt trình biên dịch mức độ tương thích, cài đặt này sẽ khiến nó tiếp tục gây rắc rối với các tính năng Java 8 mà nó không nhận ra:

version '1.0-SNAPSHOT'

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

sourceCompatibility = 1.8

1

Có thể cấu hình kho lưu trữ của bạn có các thuộc tính bao gồm Phiên bản trình biên dịch. kiểm tra settings.xmlhồ sơ.

<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

Có một nơi khác có thể gây ra vấn đề này, bất kể bạn có đang sử dụng Maven hay Gradle hay không.

Trong Settings | Editor | Inspections | Java language level migration aids | Usages of API which isn't available at the configured language level, mặc định (tôi tin) được đặt thành Respecting to project language level settings, nhưng nó có thể được đặt thành Higher than:, mà bỏ qua các cài đặt dự án.

Có nghĩa là nếu bạn làm theo các hướng dẫn trong các câu trả lời khác và đặt cấp độ ngôn ngữ của dự án của bạn thành 8, nhưng kiểm tra được đặt thành Higher than: 7, IDEA vẫn sẽ phù hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.