IDEA: javac: source release 1.7 ต้องการรีลีสเป้าหมาย 1.7


474

เมื่อทำการทดสอบ JUnit โดยใช้ IntelliJ IDEA ฉันจะได้รับ

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

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

  • ใช้ SDK 1.7
  • ระดับภาษาของโมดูลคือ 1.7

Maven build ทำงานได้ดี (นั่นเป็นเหตุผลที่ฉันเชื่อว่าสิ่งนี้ในปัญหาการกำหนดค่า IDEA)

คำตอบ:


689

เป็นไปได้ว่าคุณมีตัวเลือกคอมไพเลอร์ที่ไม่ถูกต้องซึ่งนำเข้าจาก Maven ที่นี่:

ตัวเลือกคอมไพเลอร์

ตรวจสอบโครงการและโมดูล bytecode ( เป้าหมายด้วยการตั้งค่าเวอร์ชัน ) ที่ระบุไว้บนภาพ

สถานที่อื่น ๆ ที่กำหนดระดับภาษาต้นฉบับ :

  • โครงสร้างโครงการ โครงการ

โครงการ

  • โครงสร้างโครงการ โมดูล (ตรวจสอบทุกโมดูล) แหล่งที่มา

แหล่งที่มา

Maven ระดับภาษาเริ่มต้นคือ1.5 (5.0) คุณจะเห็นเวอร์ชันนี้เป็นระดับภาษาโมดูลในภาพหน้าจอด้านบน

สิ่งนี้สามารถเปลี่ยนแปลงได้โดยใช้การกำหนดค่าmaven-compiler-pluginภายในpom.xml:

<project>
  [...]
  <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>
  [...]
</project>

หรือ

<project>
  [...]
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  [...]
</project>

IntelliJ IDEA จะเคารพการตั้งค่านี้หลังจากที่คุณนำเข้าโครงการ Maven ในหน้าต่างเครื่องมือMaven Projects อีกครั้ง :

นำเข้ามาใหม่


2
แก้ไข. การตั้งค่านี้เป็นเรื่องปกติสำหรับโมดูลทั้งหมดในโครงการหรือเฉพาะกับโมดูลที่กำหนดหรือไม่
James Raitsev

1
การตั้งค่านี้เป็นแบบต่อโครงการจะมีผลกับโมดูลทั้งหมด
CrazyCoder

8
มีเหตุผลใดบ้างหลังจากแก้ไขและใช้มันจะเปลี่ยนกลับไปเป็นค่าที่ไม่ถูกต้อง (ผ่านการเปลี่ยนแปลง maven หรือบางอย่าง)?
Patrick

5
@Patrick pom.xmlการกำหนดค่าปลั๊กอินคอมไพเลอร์ java ของคุณอาจระบุเวอร์ชัน Java ที่จะแทนที่การตั้งค่านี้ในครั้งต่อไปที่คุณทำการเปลี่ยนแปลง pom.xml (หากเปิดใช้งานการนำเข้าอัตโนมัติใหม่) หรือนำเข้าโครงการด้วยตนเองอีกครั้ง
CrazyCoder

1
@CrazyCoder ฉันเปลี่ยน pom.xml ของฉันหลังจากเปลี่ยนแปลงสิ่งนี้ก่อนหน้านี้มาก (กำลังรอการเปลี่ยนแปลงที่กำลังจะเกิดขึ้นกับ pom อื่น ๆ ) ดังนั้นดูเหมือนว่าจะเป็นคำอธิบายที่สมเหตุสมผล ขอบคุณ
Patrick

358

IntelliJ 15, 2016 และ 2017

คล้ายกับที่กล่าวถึงด้านล่างสำหรับ IntelliJ 13 และ 14 แต่มีระดับพิเศษในแผงการตั้งค่า / การตั้งค่า: การตั้งค่า > รูปร่าง, การดำเนินการปรับใช้ > คอมไพเลอร์ > Java คอมไพเลอร์

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

IntelliJ 13 และ 14

ใน IntelliJ 13 และ 14 ให้ตรวจสอบการตั้งค่า> คอมไพเลอร์> Java Compiler UI เพื่อให้แน่ใจว่าคุณไม่ได้กำหนดรุ่น bytecode ในโมดูลของคุณ

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


3
ฉันต้องลบโมดูลของฉันและปล่อยให้มันแก้ไขอัตโนมัติ (ปล่อยว่างไว้สำหรับค่าเริ่มต้นของ jdk)
Akin Okegbile

3
ใช้งานได้กับ Idea14.1 รุ่นล่าสุด
Tushar

ดังนั้นการแก้ไขที่นี่คืออะไร?
AlikElzin-kilaka

@ AlikElzin-kilaka ตั้งค่าระดับเป้าหมายเป็นสิ่งที่คุณต้องการ
Drew Noakes

มีคนช่วยอธิบายได้ไหมว่าทำไมพวกเขาถึงทำให้การตั้งค่าโมดูลเฉพาะในหน้าจอการกำหนดค่าตามความชอบส่วนกลาง
MK

61

ในIntelliJ IDEA 14.1 "Target bytecode version" อยู่ในสถานที่ที่แตกต่างออกไป

การเปลี่ยนแปลงต่อไปนี้ทำงานสำหรับฉัน:

ไฟล์> การตั้งค่า ... > สร้างการดำเนินการปรับใช้> คอมไพเลอร์> Java คอมไพเลอร์ : เปลี่ยนเวอร์ชัน bytecode เป้าหมายจาก 1.5 เป็น 1.8

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

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


หรือดีกว่าที่จะปล่อยให้มันว่างเมื่อสามารถหาได้จาก jdk!
Dragonborn

เหตุใดจึงมีการกำหนดค่าที่แตกต่างจาก Maven's?
AlikElzin-kilaka

42

คุณได้ดูที่การกำหนดค่าการสร้างควรเป็นเช่นนั้นถ้าคุณใช้ maven 3 และ JDK 7

<build>
    <finalName>SpringApp</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        ...
    </plugins>
    ...
</build>

22

ฉันพบปัญหานี้และการแก้ไขคือไปที่การตั้งค่าโครงการ> โมดูล> คลิกที่โมดูลเฉพาะ> แท็บการพึ่งพา ฉันสังเกตว่า Module SDK ยังคงตั้งค่าไว้ที่ 1.6 ฉันเปลี่ยนเป็น 1.7 และใช้งานได้


ฉันลองสิ่งนี้ ... ฉันลงเอยด้วยการลบแต่ละโมดูลและปล่อยให้แก้ไขอัตโนมัติ
Akin Okegbile

14

ฉันได้พบตัวเลือกที่ต้องการ ('target bytecode version') ในการตั้งค่า> คอมไพเลอร์> คอมไพเลอร์ javaในกรณีของฉัน (intelij ความคิด 12.1.3)


10

แก้ไขไฟล์การตั้งค่าคอมไพเลอร์ของโครงการในเส้นทางต่อไปนี้และเปลี่ยน 'เป้าหมาย' เป็น 1.7:

/project/.idea/compiler.xml

<bytecodeTargetLevel>
  <module name="project-name" target="1.7" />
</bytecodeTargetLevel>

ขอบคุณมันใช้งานได้สำหรับฉัน! อย่าลืมที่จะทำ "Make Module '[ชื่อแอปของคุณ]'" โดยคลิกขวาที่โครงการ
Shehaaz

5

ฉันแก้ไขมันโดยการตั้งค่าฟิลด์ว่าง:

การตั้งค่า> คอมไพเลอร์> คอมไพเลอร์ Java> เวอร์ชันโปรเจ็กต์ bytecode

กว่า IntelliJ ใช้รุ่นเริ่มต้นของ JDK


4

จากช่วงเวลาหนึ่งไปยังอีกฉันได้รับข้อผิดพลาดนี้โดยไม่มีเหตุผลชัดเจน ฉันเปลี่ยนการตั้งค่าทุกประเภทในคอมไพเลอร์ / โมดูลเป็นต้น แต่ในที่สุดฉันเพิ่งสร้างโครงการ IntelliJ ใหม่โดยนำเข้าโครงการ Maven อีกครั้งและปัญหาได้รับการแก้ไข ฉันคิดว่านี่เป็นข้อผิดพลาด

IntelliJ 12 129.961


เหมือนกันที่นี่สำหรับ IntelliJ 14.1.2 นำเข้าโครงการอีกครั้งและแก้ไขแล้ว
srikanth

4

ฉันได้รับสิ่งนี้หลังจากเพิ่งอัพเกรดเล็กน้อยจาก IntelliJ IDEA 14 เป็น v14.1 สำหรับฉันการเปลี่ยนแปลงการแก้ไขของ pom ช่วยให้ผู้ปกครองสูงสุดแล้วคลิกนำเข้าอีกครั้ง Maven (ถ้าไม่ได้โดยอัตโนมัติ)

แต่มันอาจจะเพียงพอที่จะคลิกขวาที่โมดูล / โมดูลรวม / แม่และ Maven -> นำเข้าใหม่


สิ่งนี้ได้ผลสำหรับฉัน! ฉันทำเพื่อโมดูลระดับสูงสุดของฉันและโมดูลลูกของฉัน
abelnation

2

ฉันแก้ไขวิธีการร้อง

ไฟล์ >> โครงสร้างโครงการ >> โครงการ >> ระดับภาษาของโครงการ -> กำหนดเวอร์ชั่นที่เหมาะสม (เช่น: 1.5)


1

ทำเครื่องหมาย .idea / misc.xml บางครั้งคุณต้องเปลี่ยน languageLevel = "JDK_1_X" แอตทริบิวต์ด้วยตนเอง


1

หากเป็นโครงการ Gradle ในไฟล์ build.gradle ของคุณให้ค้นหาการตั้งค่าต่อไปนี้:

sourceCompatibility = "xx"
targetCompatibility = "xx"

สำหรับ subrpojects ทั้งหมดในไฟล์ root build.gradle ของคุณคุณสามารถใส่:

subprojects { project ->
    sourceCompatibility = "1.7"
    targetCompatibility = "1.7"
}

แม้ว่าคุณจะสามารถตั้งค่าระดับภาษาด้วยตนเองใน Idea> การตั้งค่าหากเป็นโครงการ Gradle, Idea จะซิงโครไนซ์ไฟล์ .iml จากโมดูลโดยอัตโนมัติจากการตั้งค่า Gradle (ทดสอบกับ Idea 15+) ดังนั้นการเปลี่ยนแปลงแบบแมนนวลทั้งหมดของคุณจะถูก overriden เมื่อมีการรีเฟรช gradle

อ้างอิงจากเอกสาร Gradleหากไม่ได้ตั้งค่าไว้จะใช้การกำหนดค่า JVM ปัจจุบัน


1

ฉันพบวิธีอื่นในการเรียกใช้ข้อผิดพลาดนี้ คุณสามารถได้รับสิ่งนี้หากคุณได้จัดโครงสร้างไดเรกทอรีของคุณอีกครั้งและหนึ่งในปอมของคุณชี้ไปที่ผู้ปกครองเก่าซึ่งไม่ได้กำหนดค่า javac อีกต่อไป (เนื่องจากการกำหนดค่านั้นถูกย้ายไปที่ระดับกลาง) หากสิ่งนี้เกิดขึ้นค่าเริ่มต้นระดับสูงสุดเป็น 1.5 และ pom ระดับล่างที่ทำงานผิดปกติจะสืบทอดมา

ดังนั้นอีกสิ่งหนึ่งที่ต้องตรวจสอบเมื่อคุณเห็นข้อผิดพลาดนี้คือโครงสร้าง pom ของคุณจับคู่โครงสร้างไดเรกทอรีของคุณอย่างถูกต้อง


1

ถ้า Maven build ทำงานได้ดีให้ลองซิงโครไนซ์โครงสร้างของโครงการ Maven และ IntelliJ IDEA

ในหน้าต่างเครื่องมือ Mavenคลิกปุ่มรีเฟรชรีเฟรชคลิกปุ่มรีเฟรชเมื่อกดปุ่มนี้ IntelliJ IDEA จะวิเคราะห์โครงสร้างโครงการในหน้าต่างเครื่องมือ Maven

โปรดทราบว่าการดำเนินการนี้อาจไม่ช่วยหากคุณใช้งาน EAP เนื่องจากคุณสมบัติการซิงโครไนซ์ Maven อาจใช้งานไม่ได้


0

ตรวจสอบให้แน่ใจว่าได้เลือกการพึ่งพาที่ถูกต้อง ไฟล์> โครงสร้างโครงการ

เลือกโครงการของคุณและไปที่แท็บการอ้างอิง เลือกการพึ่งพาที่เหมาะสมจากดรอปดาวน์หรือสร้างใหม่


0

หากโซลูชันก่อนหน้าทั้งหมดไม่ได้ผลสำหรับคุณ (ซึ่งเป็นกรณีของฉัน) คุณสามารถลบไฟล์กำหนดค่า Intellij:

  • project_directory / .idea / compiler.xml
  • project_directory / .idea / encodings.xml
  • project_directory / .idea / misc.xml
  • project_directory / .idea / modules.xml
  • project_directory / .idea / vcs.xml
  • project_directory / .idea / workspace.xml
  • เป็นต้น

Intellij จะสร้างใหม่ในภายหลัง อย่างไรก็ตามระวังให้ดีสิ่งนี้จะลบการกำหนดค่า Intellij ทั้งหมดที่ทำบน projet (เช่น: การกำหนดค่าของโหมดการดีบัก, ... )


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