IntelliJ IDEA 13 sử dụng Java 1.5 mặc dù cài đặt thành 1.7


147

Mặc dù chỉ định JDK 1.7 trong tất cả các cài đặt dự án (bao gồm cả trong File -> Project Structure -> Project :: Project SDK), lỗi sau đây được tạo ra IntelliJ 13khi cố gắng biên dịch một số mã Java 7 đơn giản sử dụng toán tử kim cương:

java: diamond operator is not supported in -source 1.5
(use -source 7 or higher to enable diamond operator)

Có vị trí nào khác trong cấu hình nơi -source 7tùy chọn dự kiến sẽ được bật không?


8
Đã thử bạn: File -> Project Structure -> Project :: Project language levelđổi thành Diamonds, ARM, multi-catch etc?
Adam Shakhabov

39
Đúng. Hóa ra, vẫn còn một tùy chọn khác trong Tệp -> Cấu trúc dự án -> Mô-đun :: Nguồn (bên cạnh Đường dẫn và Phụ thuộc) và có tùy chọn "Cấp độ ngôn ngữ" cũng cần được đặt chính xác. Cảm ơn tất cả các bạn cho ý kiến ​​và câu trả lời! :-)
PNS


33
Có 3 nơi cần được cập nhật. (1) Tệp -> Cài đặt (Ctrl + alt + s cho phím tắt) sau đó "Xây dựng, thực thi, triển khai"> Trình biên dịch> Trình biên dịch Java và thay đổi "Phiên bản mã byte đích" thành phiên bản Java mong muốn của bạn. (2 và 3) Vị trí khác trong Tệp> Cấu trúc dự án (Ctrl + Alt + Shift + S)> "Cài đặt dự án"> "Dự án" thay đổi SDK dự án để trỏ đến phiên bản Java phù hợp và đặt cấp độ ngôn ngữ dự án thành phiên bản chính xác. Mã hỗ trợ chỉ thay đổi cấp độ ngôn ngữ cho bạn, không may làm điều này gây khó chịu cho các dự án mới.
8bitme

2
Điều gì sẽ xảy ra nếu tôi có 200 mô-đun trong dự án của mình, tôi có phải dành cả ngày để ẩn chúng không?

Câu trả lời:


114

Nếu không có gì giúp được (trường hợp của tôi), bạn có thể đặt nó trong tệp pom.xml của mình, như thế này:

<properties>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
</properties>

Như anh chàng tuyệt vời này đã đề cập ở đây: https://stackoverflow.com/a/25888116/1643465


4
ý tưởng tốt, nhưng không cam kết ghi đè cứng của bạn để một dự án chia sẻ, trừ khi bạn muốn để thổi ra thiết lập tất cả các đồng đội của bạn
quaintm

8
Điều này đã giải quyết vấn đề cho tôi, cảm ơn! Làm thế nào nó có thể "thổi các thiết lập của đồng đội"? Nếu mục tiêu của dự án là 1.7 thì nó là 1.7. Nó không giống như mỗi đồng đội có một môi trường mục tiêu khác nhau.
isapir

1
Tuyệt vời, của tôi là dự án maven.
huuthang

1
Đối với các dự án maven mới, cài đặt này có thể được thêm vào trong các dự án maven mặc định. Sử dụng tùy chọn | Biên tập viên | Mẫu tệp và mã | Maven | <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> Diễn đàn hỗ trợ InteliJ của
pRmdk

Điều này đã làm việc cho tôi. Nhưng chỉ khi tôi khởi động lại IntelliJ, tôi đã cố gắng xây dựng lại dự án một mình và điều đó không hiệu quả.
Metin Dagcilar

155

Vui lòng kiểm tra cấp độ ngôn ngữ dự án / mô-đun của bạn (Cấu trúc dự án | Dự án; Cấu trúc dự án | Mô-đun | tên mô-đun | Nguồn). Bạn cũng có thể muốn xem Cài đặt | Trình biên dịch | Trình biên dịch Java | Phiên bản mã byte cho mỗi mô-đun.

Đặt cũng thế này:

Tệp -> Cấu trúc dự án -> Mô-đun :: Nguồn (bên cạnh Đường dẫn và phụ thuộc) và có tùy chọn "Cấp độ ngôn ngữ" cũng cần được đặt chính xác.


2
Và kiểm tra xem Additional command line parameterstrong Java Compilercài đặt có trống không.
NeplatnyUdaj

2
Lưu ý: Điều thứ ba (Tệp -> Cấu trúc dự án -> Mô-đun :: Nguồn) là những gì đã giải quyết nó cho tôi.
Peter

Ảnh chụp màn hình hữu ích của quá trình này tại câu trả lời này: stackoverflow.com/a/21747329/1146608
Patrick M

1
Nếu sử dụng Maven, cần sửa đổi pom: stackoverflow.com/questions/27037657/or
Ngày

11
+1 cho cấp độ Ngôn ngữ. Không nên có NHIỀU vị trí để đặt và đặt lại và đặt lại cùng một thứ # $% ^!
G. Ann - Nhóm SonarSource

52

[Dành cho IntelliJ IDEA 2016.2]

Tôi muốn mở rộng một phần câu trả lời của Peter Gromov bằng một ảnh chụp màn hình cập nhật. Cụ thể phần này:

Bạn cũng có thể muốn xem Cài đặt | Trình biên dịch | Trình biên dịch Java | Phiên bản mã byte cho mỗi mô-đun.

Tôi tin rằng (ít nhất là trong năm 2016.2): ​​kiểm tra các cam kết khác nhau trong việc gitđặt lại các mức này thành 1.5.

Phiên bản mã byte theo mô-đun


5
Tôi đã từ bỏ việc duy trì những thứ này với số chính xác của chúng (vì một số lý do chúng thay đổi - tôi giả sử khi tôi làm git checkout). Tôi thấy rằng tôi có thể xóa các mục trong danh sách này một cách an toàn; mô-đun quay trở lại sử dụng "Phiên bản mã dự án".
Birchlabs

Những con số này cũng trở lại 1,5 cho tôi bất ngờ. Chỉ mã hóa cứng phiên bản nguồn và trình biên dịch trong tệp pom.xml mới hoạt động ổn định.
sheldonkreger

Lưu ý cài đặt "Phiên bản mã byte dự án" ở gần đầu của ảnh chụp màn hình này, cũng như "Phiên bản mã byte đích" được tô sáng.
Basil Bourque

@Birchlabs Cảm ơn bạn, tôi nghĩ đây là câu trả lời đúng.
chrips

1
Đây là giải pháp duy nhất khắc phục sự cố cho tôi, IntelliJ IDEA 2019.1
João Rocha da Silva

19

Ngoài ra, bạn có thể áp dụng maven-Trình biên dịch-plugin với phiên bản java thích hợp bằng cách thêm phần này vào tệp pom.xml của bạn:

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

Điều này hoạt động sau khi thoát khỏi dự án xóa thư mục .idea và tệp .iml tất cả được tạo lại khi mở lại dự án.
Andrew

1
Nhấn nút "refresh Maven" trong ý tưởng sẽ hoạt động.
OlgaMaciaszek

Làm mới @OlgaMaciaszek là cần thiết để giải pháp hoạt động. Cảm ơn!
payne

14

Tôi đã thử thay đổi Intellij IDEA như sau:

1.

File >> Settings >> Build, Execution, Deployment >> Compiler >> Java Compiler >> project bytecode version: 1.8 >> Per-module bytecode version: 1.8

2.

File >> Project Structure >> Project Settings >> Project >> SDK : 1.8, Project Language : 8 - Lambdas
File >> Project Structure >> Project Settings >> Modules >> abc : Language level: 8 - Lambdas

nhưng không có gì hoạt động, nó đã hoàn nguyên các phiên bản thành java 1.5 ngay khi tôi lưu nó.

Tuy nhiên, việc thêm các dòng dưới đây vào gốc (cấp dự án) pom.xml đã giúp tôi giải quyết vấn đề trên: (cả hai tùy chọn đều phù hợp với tôi)

Lựa chọn 1:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

Lựa chọn 2:

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

10

Tệp-> Cấu trúc dự án-> Cài đặt dự án-> Dự án-> Cấp độ ngôn ngữ dự án

Tệp-> Cấu trúc dự án-> Cài đặt dự án-> Mô-đun-> Cấp độ ngôn ngữ

Thay đổi cấp độ bằng cách sử dụng thả xuống


4

Trong dòng lệnh của bạn (thiết bị đầu cuối Unix) Chuyển đến thư mục gốc dự án của bạn và thực hiện việc này

find . -type f -name '*.iml' -exec sed -i '' s/JDK_1_5/JDK_1_8/g {} +

Điều này sẽ thay đổi thuộc tính cấp ngôn ngữ trong tất cả các tệp .iml dự án của bạn từ java 1.5 sang java 1.8.


Chưa chắc chắn nhưng bạn cũng có thể cần phải thay thế phiên bản JDK compiler.xmlở phần gốc của dự án (IntelliJ 2017.2):sed 's/target="1.5"/target="1.8"/g' .idea/compiler.xml
Oleksandr Volynets

Trình biên dịch có thể là cụ thể cho dự án của bạn. Lệnh này chỉ nhắm mục tiêu các tệp * .iml mà intellij chỉ cần. Bạn có thể phải điều chỉnh các cài đặt ngôn ngữ trong maven pom.xml của bạn hoặc trong trường hợp trình biên dịch trường hợp độc lập với IDE.
Saideep Sambaraju

1
@SaideepSambaraju trình biên dịch có mặt trong bất kỳ dự án ý tưởng có thể xây dựng nào mà tôi thấy. Từ những gì tôi thấy, tệp này là mô hình của Tùy chọn Cài đặt-> trình biên dịch (linux) -> Trình biên dịch (MacOS). Bạn có thể sử dụng nó để thay đổi phiên bản đích theo kịch bản như Oleksandr đã nói hoặc bằng tay mà không cần UI.
Serge Sargsyan

@SergeySargsyan - Tôi vừa kiểm tra nó, nó nằm trong thư mục .idea mà tôi không thể tìm thấy bằng cách tìm kiếm. Cảm ơn đã chỉ ra điều đó.
Saideep Sambaraju

2

Trước tiên, bạn cần thay đổi "phiên bản mã byte dự án" bên dưới File > Settings,Compiler > Java Compiler

Thứ hai, làm lại đầy đủ.


2

Tôi có cùng một vấn đề nhưng với tình huống khác nhau. Tôi có thể biên dịch mà không gặp vấn đề gì với maven trong dòng lệnh ( mvn clean install), nhưng trong Intellij tôi luôn gặp "java: diamond operator is not supported in -source 1.5"lỗi biên dịch mặc dù tôi đã đặt maven-Trình biên dịch-plugin với java 1.8 trong pom.xml.

Hóa ra tôi có cài đặt kho lưu trữ từ xa trong tệp cài đặt maven của tôi mà dự án phụ thuộc vào, nhưng Intellij sử dụng maven riêng của anh ta không có cùng cài đặt với maven cục bộ của tôi.

Vì vậy, giải pháp của tôi là thay đổi cài đặt maven của Intellij ( Settings -> Build, execution, Deployment -> Maven -> Maven home directory) để sử dụng maven cục bộ.


2

Trong IntelliJ Community Edition 2019.02, Thay đổi các cài đặt sau đây có hiệu quả với tôi

  1. Cập nhật tệp-> Cấu trúc dự án-> Cài đặt dự án-> Dự án-> Cấp độ ngôn ngữ dự án thành Java 11 (cập nhật lên phiên bản java mà bạn muốn sử dụng trong dự án của mình) bằng cách sử dụng thả xuống.

  2. Cập nhật tệp-> Cấu trúc dự án-> Cài đặt dự án-> Mô-đun-> Cấp độ ngôn ngữ

  3. Cập nhật tệp-> Cài đặt-> Xây dựng, thực thi, triển khai -> Trình biên dịch -> Trình biên dịch Java-> Phiên bản mã byte dự án thành java 11.

  4. Cập nhật phiên bản Target cho tất cả các mục trong Tệp-> Cài đặt-> Xây dựng, Thực thi, Triển khai -> Trình biên dịch -> Trình biên dịch Java-> Mỗi mô-đun Phiên bản mã Byte.


0

Tôi đã có tài sản sau đây làm việc cho tôi trong IntelliJ 2017

  <properties>
        <java.version>1.8</java.version>       
  </properties>

Điều này chỉ hoạt động nếu bạn sử dụng một dự án mẹ như spring boot's.
wggn

0

Một điều nữa mà có thể gây ra điều này là có sai versioncủa <parent>dự án.

Trong trường hợp của tôi, nó đã trỏ đến một dự án không tồn tại và vì một số lý do, IntelliJ đã hạ cấp phiên bản xuống 1,5 và sau đó khi tôi sửa nó, nó vẫn hiểu phiên bản mã mục tiêu là 5 (mặc dù đặt nó thành 11).

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.