หยุด IntelliJ IDEA เพื่อเปลี่ยนระดับภาษาจาวาทุกครั้งที่ pom ถูกโหลดใหม่ (หรือเปลี่ยนระดับภาษาเริ่มต้นของโครงการ)


145

เมื่อใช้ IntelliJ 12 ฉันมีโปรเจ็กต์ java และฉันใช้ maven กับ pom.xml โปรเจ็กต์ของฉันใช้ java8 แต่ดูเหมือนว่าภาษาระดับโปรเจ็กต์ดีฟอลต์ถูกตั้งค่าเป็น 6 ขณะอิมพอร์ตโปรเจ็กต์

ฉันสามารถเปลี่ยนระดับภาษาเป็น 8.0 (F4 -> Modules -> ระดับภาษา) อย่างไรก็ตามทุกครั้งที่ฉันแก้ไข pom.xml ระดับโปรเจ็กต์จะเปลี่ยนกลับไปเป็น "ใช้ระดับภาษาโปรเจ็กต์" และฉันต้องแก้ไขการตั้งค่านี้อีกครั้ง อีกครั้ง

มีสิ่งที่ฉันต้องเพิ่มใน pom.xml เพื่อตั้งค่าระดับภาษาเริ่มต้นเป็น 8.0 หรือไม่


2
pom ของคุณระบุระดับซอร์สและเป้าหมายในปลั๊กอินคอมไพเลอร์ไหม
Mark Rotteveel

อ๋อแหล่งที่มาและการตั้งค่าเป้าหมายเป็น 1.8 อย่างไรก็ตามไม่ได้ระบุไว้ในระหว่างการนำเข้าโครงการ
Quentin

@Quentin ในสถานการณ์เช่นนี้อาจเป็นวิธีที่ง่ายที่สุดในการจัดโครงการใหม่ในตำแหน่งใหม่และให้ IntelliJ นำเข้าสิ่งนั้นแทน
Thorbjørn Ravn Andersen

คำตอบ:


174

ตามความเห็นของ Mark ต่อไปนี้เป็นวิธีดำเนินการ:

<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
ปลั๊กอินที่มีอยู่ใน pom ที่ wuth 1.8 เป้าหมาย แต่มันก็ไม่ได้เปลี่ยนแปลงอะไร :(
เควนติน

2
คุณได้เปิดใช้งาน maven pom อัตโนมัติหรือไม่? คุณได้ตรวจสอบ poms ผู้ปกครอง (และปู่ย่าตายาย) มี 1.6 การตั้งค่าที่อาจมีความขัดแย้ง?
vikingsteve

1
ที่จริงแล้วโปรเจคแม่ถูกกำหนดด้วย spring-boot-starter-parent-1.1.9.RELEASE.pom.xml และใน pluginManagement maven-compiler-plugin ถูกตั้งค่าเป็น 1.6 ... ฉันพยายามแทนที่การตั้งค่านี้โดยไม่สำเร็จ ดูเหมือนว่า spring boot 1.2 RC ไม่ได้รวม maven-compiler-plugin อีกต่อไปฉันจะลองดู - เปิดใช้งานการนำเข้าอัตโนมัติแล้ว
เควนติน

เยี่ยมมากนั่นอาจเป็นสาเหตุ หากคุณระบุปลั๊กอินคอมไพเลอร์ maven รุ่นเดียวกันอาจเป็นไปได้ที่จะแทนที่การตั้งค่าต้นทาง / ปลายทาง อาจลองใช้ในรูทโครงการ pom.xml ของคุณ
vikingsteve

2
ในกรณีของฉันสิ่งนี้ไม่ได้ผล ฉันต้องลบการตั้งค่าที่กล่าวถึงในคำตอบนี้และเพิ่มต่อไปนี้:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
genonymous

99

คำตอบสั้น ๆ ของ vikingsteve คือ:

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

6
น่ารำคาญน้อยลง!
Artur Cichosz

4
นี่ไม่ใช่แค่รุ่นสั้น ๆ แต่เป็นรุ่นที่จำเป็นในกรณีของฉัน คำตอบของไวกิ้งไม่ได้ผลสำหรับฉัน ดังนั้นฉันจึงลบการตั้งค่านั้นและใช้อันนี้
genonymous

23

ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับความขัดแย้งทางแนวคิดระหว่าง Maven compiler plugin และ IntelliJ เห็นได้ชัดว่าปลั๊กอินคอมไพเลอร์เวอร์ชันใหม่มีระดับเริ่มต้น 1.5 (ดูที่http://maven.apache.org/plugins/maven-compiler-plugin/ ) ดังนั้นหากมีการใช้ปลั๊กอินคอมไพเลอร์ในโครงการและระดับคอมไพเลอร์ไม่ได้ตั้งค่าไว้อย่างชัดเจนใน pom.xml เมื่อใดก็ตามที่ POM ถูกประมวลผลอีกครั้งระดับจะเปลี่ยนกลับเป็นค่าเริ่มต้น

ดังนั้นจึงมีความขัดแย้งทางความคิดที่ Intellij IDEA เพิกเฉย IDE ยังอนุญาตให้ตั้งค่าโปรเจ็กต์และโมดูล แต่ไม่มีคำเตือนหรือข้อเสนอแนะว่าการตั้งค่านี้ควบคุมโดย pom.xml วิธีแก้ไขอาจเป็นการอนุญาตให้มีการแทนที่การตั้งค่าปลั๊กอินคอมไพเลอร์ POM อย่างชัดเจน (อาจไม่ฉลาดเพราะสิ่งที่เกิดขึ้นเมื่อคุณใช้ maven บนบรรทัดคำสั่ง) หรือเพื่อยกเลิกการควบคุมใน IDE เมื่อการตั้งค่านี้จาก POM มีผล

วิธีแก้ปัญหาในปัจจุบันคือการตั้งค่าระดับคอมไพเลอร์ที่ต้องการในปลั๊กอินคอมไพเลอร์ใน pom, นำเข้าอีกครั้งแทนที่จะพยายามตั้งค่าในการตั้งค่าโมดูล


1
ตกลง การขาดความคิดเห็นที่การตั้งค่าใน IDEA กำลังจะถูกเพิกเฉยและการนำเข้าจาก POM นั้นสร้างความสับสนอย่างมากโดยเฉพาะเมื่อใช้ POM หลัก
Gillfish

9

ฉันกำลังอัพเกรดโครงการจาก JDK 8 เป็น JDK 10+ ฉันมีคุณสมบัติคอมไพเลอร์ระบุไว้อย่างถูกต้องดังนี้

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

อย่างไรก็ตามโครงการ Idea จะรีเซ็ตระดับภาษาเป็น 8

ในที่สุดฉันก็พบว่ากระบวนการนำเข้า Maven ของ Idea ใช้ JDK 8 เพื่อนำเข้าโครงการซึ่ง จำกัด ระดับภาษาไว้ที่ <= 8

ในการแก้ไขฉันได้อัพเดตคุณสมบัติ 'JDK for importer' ภายใต้การตั้งค่า -> Build, Execution, Deployment -> Build Tools -> Maven -> การนำเข้าเพื่อใช้ JDK 11

ป้อนคำอธิบายรูปภาพที่นี่


แก้ไขปัญหาของฉันแล้ว ดูเหมือนว่า IntelliJ จะอัพเดต JRE ภายในด้วยรีลีสในภายหลัง (ประมาณราว ๆ 2019.2)
Hasan Aslam

8

มีสองวิธีในการทำเช่นนี้เพิ่มหนึ่งในวิธีในไฟล์ pom.xml ของคุณ:

ก่อน - เพิ่มคุณสมบัติ

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

ที่สอง - เพิ่มปลั๊กอิน

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

แจ้งให้เราทราบหากช่วยได้


ฉันได้ทำทั้งสองอย่างแล้วและคอมไพเลอร์ยังคงถูกรีเซ็ตเป็น 1.5 ทุกครั้งที่ฉันพยายามเรียกใช้ mvn คอมไพล์จากภายใน IntelliJ อย่างไรก็ตามทำงานได้ดีเมื่อเรียกใช้จากบรรทัดคำสั่งด้านนอกของ IntelliJ
26270

1
ใน IntelliJ อย่าลืมนำเข้าการตั้งค่า maven อีกครั้งหลังจากการปรับเปลี่ยน วิธีแก้ปัญหาใช้งานได้สำหรับฉัน
Pierluigi Vernetto

4

ไม่มีวิธีแก้ปัญหาช่วยในกรณีของฉัน ผมไม่จำเป็นต้องระบุ Java รุ่นใด ๆ pom.xmlในของฉัน

ฉันต้องการเปิด<project-name>.imlไฟล์และเปลี่ยนรุ่น JDK ที่นั่น

เดิม:

<?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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Updated:

<?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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

มันไม่สมเหตุสมผลเลย ฉันไม่ได้ระบุรุ่น JDK สำหรับ Java 1.5 ไว้เลย


ด้วยตัวเองนี้แก้ไขปัญหาให้ฉันใน IntelliJ 2019.3 โดยไม่ต้องให้ฉันเปลี่ยนอะไรใน pom ของฉันหรือที่อื่น ฉันไม่เคยระบุ JDK 1.5 ในทำนองเดียวกันเลย
Michael Christoff

ตัวอย่าง: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León

1

ฉันต่อสู้อย่างหนักกับปัญหานี้เนื่องจากการสร้างไมโครไซต์ด้วย Dropwizard ในที่สุดฉันก็พบว่าฉันมีคุณสมบัติสร้างของฉันในไฟล์pomผิด(บริการหลักของpom.xml)

ดังนั้นแม้ว่าแพคเกจอื่น ๆ ที่มีมากขึ้นเช่นห้องสมุดผมไม่สามารถที่จะใช้ Java 8 ไวยากรณ์

เมื่อฉันปรับโครงสร้างการสร้างปลั๊กอินใหม่ในไฟล์ "global" .pom.xml"คอนเทนเนอร์ลูกทั้งหมดสามารถใช้ไวยากรณ์ใหม่ได้

อาจช่วยให้คนที่มีปัญหากับโครงการหลายคอนเทนเนอร์


0

สำหรับฉันโซลูชันของการอัพเดต POM (ปลั๊กอินพร้อมคุณสมบัติ) เป็น Java คอมไพเลอร์เวอร์ชันที่ต้องการ (1_7 ในกรณีของฉัน) ทำงานได้ อย่างไรก็ตามเนื่องจากไฟล์. iml สำหรับแต่ละโครงการถูกสร้างขึ้นด้วย pom ดั้งเดิม (ด้วยคอมไพเลอร์รุ่นเริ่มต้นที่ 1_5 ตามที่อธิบายโดยบางคนด้านบน) มี JDK เวอร์ชัน 1_5 ซึ่งยังคงแทนที่รุ่น pom

ฉันลบโฟลเดอร์ .idea ด้วยตนเองและนำเข้าโมดูลไปยัง IntelliJ ด้วยการนำเข้าอีกครั้งจาก pom ที่อัปเดต เมื่อฉันนำเข้าโมดูลใหม่จาก POM ที่อัปเดตแล้วฉันจะเห็นว่าไฟล์ iml มีรุ่น JDK ที่อัปเดต (1_7 ในกรณีของฉัน)


0

มีขั้นตอนเพิ่มเติมหนึ่งที่ผมก็ต้องทำตามที่นอกเหนือไปคือการตั้งค่า Maven สร้างคุณสมบัติ , เพิ่ม Maven เรียบเรียง-ปลั๊กอินและการปรับเปลี่ยนรุ่น Java ในไฟล์ (แต่ละเอกสารมีคำตอบอื่นอยู่แล้ว) คุณยังมีการตั้งรุ่นคอมไพเลอร์ในการตั้งค่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.