ฉันพบข้อผิดพลาดใน Eclipse ข้อความแสดงข้อผิดพลาดนี้หมายถึงอะไร:
ประเภท iglu.ir.TermVector ไม่สามารถแก้ไขได้ มันถูกอ้างอิงทางอ้อมจากไฟล์. class ที่ต้องการ
ฉันพบข้อผิดพลาดใน Eclipse ข้อความแสดงข้อผิดพลาดนี้หมายถึงอะไร:
ประเภท iglu.ir.TermVector ไม่สามารถแก้ไขได้ มันถูกอ้างอิงทางอ้อมจากไฟล์. class ที่ต้องการ
คำตอบ:
หมายความว่า: "คลาสที่คุณใช้ต้องการคลาสอื่นที่ไม่ได้อยู่ใน classpath" คุณควรตรวจสอบให้แน่ใจ (ตามที่ Harry Joy แนะนำ) เพื่อเพิ่ม jar ที่ต้องการให้กับ classpath
นี่น่าจะเป็นเรื่องของ Eclipse ที่สับสนเพราะเป็นข้อผิดพลาดที่แท้จริง ฉันเพิกเฉยต่อข้อผิดพลาดและเรียกใช้บริการเว็บที่มีจุดปลายอินเทอร์เฟซที่มันบ่นและมันก็ทำงานได้ดียกเว้นต้องจัดการกับกล่องโต้ตอบทุกครั้งที่ฉันต้องการเรียกใช้ เพียงข้อผิดพลาดทึบแสงอื่นที่ไม่ได้บอกอะไรฉัน
มันเกิดขึ้นกับฉันในบางครั้งฉันมักจะแก้ไขด้วยคำสั่ง "mvn eclipse: clean" เพื่อล้างคุณสมบัติเก่าแล้วเรียกใช้ mvn eclipse: eclipse -Dwtpversion = 2.0 (สำหรับโครงการเว็บแน่นอน) มีการบันทึกคุณสมบัติเก่าไว้เพื่อให้เกิดความสับสนในบางครั้งคราส
mvn eclipse:clean
และ / หรือ mvn eclipse:eclipse
ดูเหมือนจะเป็นเล่ห์กลที่จะทำให้มันใช้งานได้
ผมมีข้อผิดพลาดนี้เนื่องจากมีพื้นที่เก็บข้อมูล Maven เสียหายท้องถิ่น
ดังนั้นเพื่อแก้ไขปัญหาทั้งหมดที่ฉันต้องทำคือไปที่ที่เก็บของฉันและลบโฟลเดอร์ที่เกี่ยวข้อง. jar นั้นแล้วบังคับใช้update maven
ใน Eclipse
ดูเหมือนว่านี่เป็นปัญหาที่ทราบแล้ว (Bug 67414) ที่ได้รับการแก้ไขใน 3.0 ... มีคนแสดงความคิดเห็นว่ามันเกิดขึ้นสำหรับพวกเขาใน 3.4 เช่นกัน
ในเวลาเฉลี่ยการแก้ไขคือการลบไลบรารีระบบ JRE ออกจากโครงการและเพิ่มกลับเข้าไปอีกครั้ง
Here are the steps:
ไปที่คุณสมบัติของโครงการที่มีข้อผิดพลาดในการสร้าง (คลิกขวา> คุณสมบัติ)
ดูแท็บ "ไลบรารี" ในส่วน "สร้างเส้นทาง"
ค้นหา "JRE System Library" ในรายการ (หากนี่หายไปข้อความแสดงข้อผิดพลาดนี้ไม่ใช่ข้อผิดพลาด eclipse แต่เป็นโครงการที่กำหนดค่าผิดพลาด)
ลบ "JRE System Library"
กด "เพิ่มห้องสมุด ... " เลือก "ห้องสมุดระบบ JRE" และเพิ่ม JRE ที่เหมาะสมสำหรับโครงการ (เช่น 'พื้นที่ทำงานเริ่มต้น JRE')
กด "เสร็จสิ้น" ในการเลือกไลบรารีและ "ตกลง" ในคุณสมบัติโครงการแล้วรอการสร้างโครงการใหม่
หวังว่าข้อผิดพลาดจะได้รับการแก้ไข ...
ข้อผิดพลาดนี้เกิดขึ้นเมื่อคลาสในไฟล์ jar ไม่เป็นไปตามโครงสร้างเดียวกันกับโครงสร้างโฟลเดอร์ของ jar
เช่นถ้าไฟล์คลาสของคุณมีแพ็คเกจ com.test.exam และคลาส. class ที่สร้างขึ้นจากไฟล์คลาสนี้จะมีโครงสร้างข้อผิดพลาด test.exam ... จะถูกโยนทิ้ง คุณต้องแก้ไขโครงสร้างแพ็คเกจของคลาสของคุณแล้วรวมไว้ในเส้นทางการสร้าง ecplipse ...
ฉันได้รับข้อยกเว้นนี้เนื่องจากคราสทำงานใน jdk รุ่นอื่นเพียงแค่เปลี่ยนถูกต้องทำความสะอาดและสร้างและทำงาน!
ฉันมีกรณีที่น่าสนใจของปัญหานี้กับ Eclipse 4.4.2 โปรเจ็กต์ของฉัน (P1) อ้างอิงคลาสภายนอก (โปรเจ็กต์ P2) ด้วยสองวิธีที่มีชื่อเดียวกัน แต่มีชนิดอาร์กิวเมนต์ที่แตกต่างกัน:
public static void setItem(Integer id) …
public static void setItem(Item item) …
ประเภทItem
นี้มีอยู่ในโครงการ P3 ที่สามซึ่งฉันไม่ต้องการให้ปรากฏที่นี่ P1 เรียกว่าวิธีแรกเท่านั้น:
ExternalClass.setItem(Integer.valueOf(12345));
ดังนั้นวิธีที่สองซึ่งใช้Item
คลาสนั้นไม่ได้ใช้และเป็นความจริงที่ว่า P3 ไม่ได้อยู่ในคอมไพล์คลาสพา ธ การรวบรวม - ทำไมจึงควรใช้หากไม่ได้ใช้
ยังคราสบอกฉัน
The type ...Item cannot be resolved.
It is indirectly referenced from required .class files
การรวบรวมจากบรรทัดคำสั่งไม่ได้สร้างปัญหาดังกล่าว การเปลี่ยนชื่อของวิธีที่สอง (ไม่ได้ใช้ที่นี่!) ทำให้ปัญหาหายไปใน Eclipse เช่นกัน
สิ่งที่แก้ไขให้ฉันคือ right clicking on project > Maven > Update Project
หากคุณยังไม่พบสิ่งผิดปกติในการตั้งค่าคุณสามารถลองโครงการ -> ทำความสะอาดและทำความสะอาดโครงการทั้งหมดในพื้นที่ทำงาน
แก้ไข: ขออภัยไม่เห็นคำแนะนำของ verbose_mode ... สิ่งเดียวกัน
สำหรับฉันมันเกิดขึ้นเมื่อฉันอัพเกรด jdk ของฉันเป็น 1.8.0_60 ด้วยชุดเหยือกเก่าของฉันถูกใช้เป็นเวลานาน หากฉันย้อนกลับไปที่ jdk1.7.0_25 ปัญหาเหล่านี้จะหมดไป ดูเหมือนว่าปัญหาเกี่ยวกับความเข้ากันได้ระหว่าง JRE และไลบรารี
ฉันได้รับข้อผิดพลาดเมื่อฉันเพิ่งเปลี่ยนการตั้งค่า svn บางอย่างและไม่ใช่สิ่งใดในรหัส เพียงแค่ทำความสะอาดโครงการแก้ไขข้อผิดพลาด
ในกรณีของฉันฉันสร้างโครงการและทำมันและminSdkVersion=9
ผมใช้สร้างขึ้นโดยอัตโนมัติtargetSdkVersion=17
libs/android-support-v4.jar
ฉันยังต้องใช้ประโยชน์จากการActionBarActivity
ใช้android-support-v7-appcomapt.jar
การใช้ดังนั้นฉันเพิ่งคัดลอกandroid-support-v7-appcompat.jar
ไฟล์จากandroid-sdk/extras/andrid/support/v7/appcompat/libs
โฟลเดอร์และวางลงในlibs
โฟลเดอร์โครงการของฉัน และสิ่งนี้ทำให้เกิดข้อผิดพลาดข้างต้น โดยพื้นฐานแล้วฉันต้องใส่android-support-v4.jar
ไฟล์จากโฟลเดอร์android-sdk/extras/andrid/support/v7/appcompat/libs
โครงการของฉันlibs
ด้วย ตามความรู้ของฉันv7.jar
ไฟล์มีการอ้างอิงในv4.jar
ไฟล์ ดังนั้นจึงจำเป็นต้องใช้v4.jar
ไฟล์ของตัวเองแทนที่จะสร้างโครงการของฉันสร้างv4.jar
ไฟล์โดยอัตโนมัติ
อย่างรวดเร็วและง่ายดายฉันแก้ไขด้วยวิธีนี้ (ฉันใช้รุ่น ADT: v21.0.0-531062 ใน Windows XP Home Edition)
ใช้งานได้ แต่ปัญหากลับมาทุกสองสามวัน ฉันทำเช่นเดียวกับข้างต้นและมันแก้ปัญหาและช่วยให้ฉันพัฒนา
นอกเหนือจากสาเหตุที่แนะนำแล้วของไฟล์คลาสที่หายไปข้อผิดพลาดนี้ยังสามารถระบุไฟล์คลาสที่ซ้ำกัน eclipse รายงานข้อผิดพลาดนี้เมื่อไฟล์คลาสบนพา ธ บิลด์ใช้คลาสอื่นที่มีหลายนิยามในพา ธ บิลด์
เนื่องจากคุณให้รายละเอียดเล็ก ๆ น้อย ๆ กับเรามากที่สุดสิ่งที่คุณทำซึ่งเป็นความผิดพลาดอย่างง่ายที่จะทำก็คือแทนที่จะมุ่งไปที่
Build Path > Configure Build Path > Projects
และเพิ่มโฟลเดอร์โครงการเพิ่มเติมจากตรงนั้นแทนที่จะไปที่
Build Path > Configure Build Path > Libraries
และเพิ่มโฟลเดอร์โครงการของคุณจากที่นั่นแทน
นี่เป็นกรณีที่แน่นอนที่สุดหากรหัสของคุณถูกต้องทั้งหมด แต่เมื่อจัดระเบียบการนำเข้าใหม่โดยอัตโนมัติผ่านctrl+space
ทางลัดแทนคำสั่งการนำเข้าของคุณที่อ้างถึง com.your.additionalproject การอ้างอิงของคุณชี้ไปที่ bin.com.your.additionalproject
หมายเหตุถังขยะ หมายความว่าคุณหมายถึงคลาสของคุณโดยทางอ้อมโดยใช้โครงสร้างโฟลเดอร์โครงการอื่นของคุณเป็นไลบรารีทำให้ IDE ของคุณทำหน้าที่ทั้งหมดในการค้นหาคลาสไบนารีที่คุณกำลังอ้างอิง
หากต้องการแก้ไขให้ลบโฟลเดอร์ออกจากไลบรารีและเพิ่มเข้าไปใหม่ภายใต้แท็บโครงการและจัดระเบียบการนำเข้าของคุณใหม่ โครงการของคุณควรจะทำงานได้ดี
เมื่อฉันใช้เวอร์ชัน eclipse ใหม่และพยายามใช้พื้นที่ทำงานก่อนหน้าซึ่งฉันใช้กับเวอร์ชัน eclipse เก่าข้อผิดพลาดนี้เกิดขึ้น
นี่คือวิธีที่ฉันแก้ปัญหา:
คลิกขวาที่โปรเจ็กต์ของฉันบน Package Explorer -> Properties -> Java Build Path -> Libraries -> ฉันเห็นข้อผิดพลาด (Cross Sign) บน JRE System Library เนื่องจากไม่พบเส้นทาง -> ดับเบิลคลิกที่ไลบรารีระบบ JRE -> เลือกตัวเลือก "เวิร์กสเปซดีฟอลต์ JRE" -> เสร็จสิ้น -> ตกลง -> BUM กำลังทำงานอยู่
FYI
ในกรณีของฉันมันเป็นผลมาจากการเพิ่มการพึ่งพาใหม่ของฉัน pom.xml
ไฟล์
การพึ่งพาใหม่ขึ้นอยู่กับไลบรารีเวอร์ชันเก่า (2.5) ห้องสมุดเดียวกันนั้นต้องการห้องสมุดอื่นในของฉันpom.xml
แต่มันต้องการเวอร์ชัน 3.0
ด้วยเหตุผลบางอย่างเมื่อ Maven พบกับข้อขัดแย้งเหล่านี้มันจะตัดรุ่นล่าสุดออกไป ใน Eclipse เมื่อดูpom.xml
คุณสามารถเลือกแท็บ "ลำดับชั้นการพึ่งพา" ที่ด้านล่างเพื่อดูวิธีการแก้ไขการพึ่งพา ที่นี่คุณจะพบว่าห้องสมุด (และคลาสนั้น) ถูกตัดออกด้วยเหตุผลนี้หรือไม่
ในกรณีของฉันมันง่ายเหมือนการล็อคเวอร์ชั่นใหม่ คุณสามารถทำได้โดยคลิกขวาที่รายการ - มีตัวเลือกในการล็อคมันลงในเมนูบริบท
ชี้ JRE ในเส้นทาง Build ไปยัง JDK ที่ทำงานให้ฉัน