dừng IntelliJ IDEA để chuyển cấp độ ngôn ngữ java mỗi khi pom được tải lại (hoặc thay đổi cấp độ ngôn ngữ dự án mặc định)


145

Sử dụng IntelliJ 12, tôi có một dự án java và tôi sử dụng maven với pom.xml. Dự án của tôi đang sử dụng java8, nhưng có vẻ như mức ngôn ngữ dự án mặc định đã được đặt thành 6 trong khi nhập dự án.

Tôi có thể thay đổi cấp độ ngôn ngữ thành 8.0 (F4 -> Mô-đun -> Cấp độ ngôn ngữ) tuy nhiên mỗi lần tôi chỉnh sửa pom.xml của mình, cấp độ dự án được chuyển trở lại thành "sử dụng cấp độ ngôn ngữ dự án" và tôi phải chỉnh sửa lại cài đặt này và lần nữa.

Có thứ gì tôi cần thêm vào pom.xml để đặt mức ngôn ngữ mặc định thành 8.0 không?


2
Pom của bạn có chỉ định mức nguồn và mức đích trong cấu hình plugin trình biên dịch không?
Đánh dấu Rotteveel

yep, nguồn & mục tiêu được đặt thành 1.8. Tuy nhiên, nó không được chỉ định trong quá trình nhập dự án
Quentin

@Quentin Trong tình huống như vậy, có thể dễ dàng nhất để đóng lại dự án ở một vị trí mới và để IntelliJ nhập thay vào đó một lần nữa.
Thorbjørn Ravn Andersen

Câu trả lời:


174

Theo nhận xét của Mark, đây là cách thực hiện:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

10
Plugin hiện diện trong mục tiêu pom, wuth 1.8, nhưng nó không thay đổi bất cứ điều gì :(
Quentin

2
Bạn đã tự động nhập khẩu maven pom của mình chưa? Bạn đã kiểm tra các poms cha mẹ (và ông bà), có 1.6 cài đặt nào có thể xung đột không?
vikingsteve

1
Thật vậy, dự án mẹ được định nghĩa với spring-boot-starter-Parent-1.1.9.RELEASE.pom.xml và trong pluginQuản lý maven-Trình biên dịch-plugin được đặt thành 1.6 ... Tôi đã cố gắng ghi đè cài đặt này mà không thành công. Có vẻ như spring boot 1.2.RC không bao gồm maven-Trình biên dịch-plugin nữa, tôi sẽ dùng thử. - nhập tự động được kích hoạt.
Quentin

Tuyệt vời, đó có thể là lý do tại sao. Nếu bạn chỉ định cùng một phiên bản plugin trình biên dịch maven, có thể ghi đè cài đặt nguồn / đích. Có lẽ thử điều đó trong dự án gốc pom.xml của bạn.
vikingsteve

2
Trong trường hợp của tôi, điều này đã không làm việc. Tôi đã phải xóa cài đặt được đề cập trong câu trả lời này và thay vào đó thêm vào như sau:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
nghĩa với

99

Một phiên bản ngắn hơn của câu trả lời của vikingsteve là:

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

6
Ít phiền toái!
Artur Cichosz

4
Đây không chỉ là một phiên bản ngắn mà là một phiên bản cần thiết trong trường hợp của tôi. Câu trả lời của vikingsteve không hiệu quả với tôi. Vì vậy, tôi loại bỏ cài đặt đó và sử dụng cái này.
tên đồng nghĩa

23

Tôi nghĩ rằng điều này có liên quan đến xung đột khái niệm giữa plugin trình biên dịch Maven và ý tưởng IntelliJ. Rõ ràng các phiên bản mới hơn của plugin trình biên dịch có mức mặc định là 1,5 (xem http://maven.apache.org/plugins/maven-compiler-plugin/ ). Vì vậy, nếu plugin trình biên dịch hoàn toàn được sử dụng trong một dự án và mức trình biên dịch không được đặt rõ ràng trong pom.xml, bất cứ khi nào POM được xử lý lại, mức sẽ trở về mặc định.

Vì vậy, có một xung đột về khái niệm bị bỏ qua bởi Intellij IDEA. IDE vẫn cho phép một người đặt các cài đặt dự án và mô-đun, nhưng không đưa ra cảnh báo hay phản hồi nào cho thấy cài đặt này được điều khiển bởi pom.xml. Các giải pháp có thể cho phép ghi đè cài đặt plugin trình biên dịch POM một cách rõ ràng (có lẽ không khôn ngoan vì điều gì xảy ra khi bạn sử dụng maven trên dòng lệnh) hoặc hủy kích hoạt các điều khiển trong IDE khi cài đặt này từ POM có hiệu lực.

Giải pháp ở thời điểm hiện tại là đặt mức trình biên dịch mong muốn trong plugin trình biên dịch trong pom, nhập lại, thay vì cố gắng đặt nó trong cài đặt mô-đun.


1
Đã đồng ý. Việc thiếu thông tin phản hồi rằng các cài đặt trong IDEA sẽ bị bỏ qua và được nhập lại từ POM rất khó hiểu, đặc biệt là khi sử dụng POM gốc.
Cá tráp

9

Tôi đang nâng cấp một dự án từ JDK 8 lên JDK 10+. Tôi đã có các thuộc tính trình biên dịch được chỉ định chính xác như sau:

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

Tuy nhiên, dự án Idea sẽ tiếp tục đặt lại cấp độ ngôn ngữ thành 8.

Cuối cùng, tôi đã tìm ra rằng quy trình nhập Maven của Idea đang sử dụng JDK 8 để nhập dự án giới hạn mức độ ngôn ngữ ở <= 8.

Để khắc phục, tôi đã cập nhật thuộc tính 'JDK cho nhà nhập khẩu trong Cài đặt -> Xây dựng, Thực thi, Triển khai -> Công cụ xây dựng -> Maven -> Nhập để sử dụng JDK 11.

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


Đã giải quyết vấn đề của tôi. Có vẻ như IntelliJ đã cập nhật JRE nội bộ của họ với các bản phát hành sau (đâu đó vào khoảng năm 2019.2). Khá khó khăn để theo dõi ...
Hasan Aslam

8

Có hai cách để thực hiện việc này, thêm một trong số chúng vào tệp pom.xml của bạn:

Đầu tiên- Thêm thuộc tính

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

thứ hai- Thêm Plugin

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

Hãy cho tôi biết nếu nó giúp.


Tôi đã thực hiện cả hai điều này và trình biên dịch vẫn đang được đặt lại thành 1,5 mỗi lần tôi cố chạy biên dịch mvn từ bên trong IntelliJ. Tuy nhiên, nó hoạt động tốt khi chạy từ dòng lệnh bên ngoài IntelliJ.
dùng26270

1
trong IntelliJ, hãy nhớ nhập lại cài đặt maven sau khi sửa đổi. Các giải pháp làm việc cho tôi.
Pierluigi Vernetto

4

Không có giải pháp nào giúp được trong trường hợp của tôi. Tôi không cần chỉ định bất kỳ phiên bản Java nào trong pom.xml.

Tôi cần mở <project-name>.imltệp và thay đổi phiên bản JDK ở đó.

Nguyên:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Cập nhật:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Điều này không có ý nghĩa gì cả. Tôi chưa chỉ định phiên bản JDK cho Java 1.5.


Điều này, tự nó đã giải quyết vấn đề cho tôi trong IntelliJ 2019.3, mà không yêu cầu tôi thay đổi bất cứ điều gì trong pom của tôi hoặc bất cứ nơi nào khác. Tôi tương tự không bao giờ chỉ định JDK 1.5 ở bất cứ đâu.
Michael Christoff

Ví dụ: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León

1

Tôi đã đấu tranh rất nhiều với vấn đề này, do xây dựng các dịch vụ siêu nhỏ với Dropwizard. Cuối cùng, tôi phát hiện ra rằng tôi có các thuộc tính xây dựng của mình trong tệp pom sai (Dịch vụ chính pom.xml).

Vì vậy, mặc dù các gói khác giống thư viện hơn , tôi không thể sử dụng cú pháp Java 8.

Khi tôi tái cấu trúc plugin xây dựng thành "toàn cầu" .pom.xml tệp , tất cả các vùng chứa con đều có thể sử dụng cú pháp mới.

Có thể giúp ai đó có vấn đề với các dự án nhiều container


0

Đối với tôi, giải pháp cập nhật POM (bổ trợ cộng với các thuộc tính) lên phiên bản trình biên dịch Java cần thiết (1_7 trong trường hợp của tôi) đã hoạt động. Tuy nhiên, vì tệp .iml cho mỗi dự án được tạo bằng pom gốc (với phiên bản trình biên dịch mặc định là 1_5 như được giải thích bởi ai đó ở trên) có phiên bản JDK là 1_5, nên phiên bản này vẫn ghi đè lên phiên bản pom.

Tôi đã xóa thư mục .idea theo cách thủ công và nhập mô-đun vào IntelliJ với một bản nhập lại từ pom được cập nhật. Khi tôi nhập lại Mô-đun từ POM được cập nhật, tôi có thể thấy các tệp iml có phiên bản JDK được cập nhật (1_7 trong trường hợp của tôi).


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.