ข้อผิดพลาด Eclipse: อ้างอิงทางอ้อมจากไฟล์. class ที่ต้องการหรือไม่


185

ฉันพบข้อผิดพลาดใน Eclipse ข้อความแสดงข้อผิดพลาดนี้หมายถึงอะไร:

ประเภท iglu.ir.TermVector ไม่สามารถแก้ไขได้ มันถูกอ้างอิงทางอ้อมจากไฟล์. class ที่ต้องการ


21
เพิ่ม jar ที่มี iglu.ir.TermVector ในเส้นทางต้นทางของโครงการของคุณ
แฮร์รี่จอย

2
หากคุณแน่ใจว่ามีชั้นเรียนให้ลองทำความสะอาดและรีเฟรชทุกโครงการของคุณ
Mirco

เรื่องนี้เกิดขึ้นกับฉันเนื่องจากการพึ่งพาสกรรมกริยาในขวดของฉัน
Janac Meena

ตรง! jar นี้ต้องมีอยู่ในการพึ่งพา pom.xml
gaurav

คำตอบ:


193

หมายความว่า: "คลาสที่คุณใช้ต้องการคลาสอื่นที่ไม่ได้อยู่ใน classpath" คุณควรตรวจสอบให้แน่ใจ (ตามที่ Harry Joy แนะนำ) เพื่อเพิ่ม jar ที่ต้องการให้กับ classpath


3
คำตอบทั่วไปและเรียบง่ายที่ช่วยฉันได้มากในกรณีที่แตกต่างกัน :) ขอบคุณ
Mariusz Chw

ในขณะที่คุณพยายามลบคลาสโดยเฉพาะให้ตรวจสอบคลาสพาเรนต์เพื่ออ้างอิงถึงประเภทที่หายไป หากนั่นไม่ใช่สิ่งที่ข้อความนี้หมายถึงทุกครั้งมันอาจหมายถึงเวลาส่วนใหญ่
butallmj

ใช่ฉันพบว่ามันเป็นเพราะไหที่ขาดหายไปในไหอ้างอิง :) ขอบคุณ
Ali Imran

21
@Arne ทำไมมันถึงพูดถึงการอ้างอิงทางอ้อมแล้ว? มันไม่ควรจะพูดว่ามันไม่ได้อ้างอิงเลย?
Pacerier

2
@Pierier ที่จะไม่เป็นจริง ไม่ใช่รหัสของคุณที่อ้างถึงประเภทนี้โดยตรง แต่เป็นสิ่งที่รหัสของคุณใช้ดังนั้นการพึ่งพาจากรหัสของคุณไปยังประเภทนั้นคือการถ่ายทอด "เท่านั้น" แต่มีอยู่ "ทางอ้อม" บอกตำแหน่งที่จะมอง
hiergiltdiestfu

22

นี่น่าจะเป็นเรื่องของ Eclipse ที่สับสนเพราะเป็นข้อผิดพลาดที่แท้จริง ฉันเพิกเฉยต่อข้อผิดพลาดและเรียกใช้บริการเว็บที่มีจุดปลายอินเทอร์เฟซที่มันบ่นและมันก็ทำงานได้ดียกเว้นต้องจัดการกับกล่องโต้ตอบทุกครั้งที่ฉันต้องการเรียกใช้ เพียงข้อผิดพลาดทึบแสงอื่นที่ไม่ได้บอกอะไรฉัน


มันยังไม่ได้อยู่ในขวด มันเป็นหนึ่งในโครงการที่รวมอยู่ในโครงการรวมทั้งหมดที่มีความเกี่ยวข้องใด ๆ
Jerry Miller

3
ฉันประสบปัญหานี้ใน eclipse แต่การสร้างผ่าน maven ทำงานได้ดี การแก้ไขคือการลบและนำเข้าโครงการอีกครั้งในเวิร์กสเปซ eclipse ที่มีคลาสที่ต้องการ
PiersyP

อาจเกิดขึ้นบางครั้ง แต่ฉันพบข้อผิดพลาดที่ให้การตอบสนองเหมือนกันและโครงการไม่สามารถสร้างได้
Christopher Connery

13

มันเกิดขึ้นกับฉันในบางครั้งฉันมักจะแก้ไขด้วยคำสั่ง "mvn eclipse: clean" เพื่อล้างคุณสมบัติเก่าแล้วเรียกใช้ mvn eclipse: eclipse -Dwtpversion = 2.0 (สำหรับโครงการเว็บแน่นอน) มีการบันทึกคุณสมบัติเก่าไว้เพื่อให้เกิดความสับสนในบางครั้งคราส


ฉันทำความสะอาดโครงการ (จากโครงการ -> ทำความสะอาด ... ) และใช้งานได้
Anu Shibin Joseph Raj

mvn eclipse:cleanและ / หรือ mvn eclipse:eclipseดูเหมือนจะเป็นเล่ห์กลที่จะทำให้มันใช้งานได้
Antoine Martin

13

ผมมีข้อผิดพลาดนี้เนื่องจากมีพื้นที่เก็บข้อมูล Maven เสียหายท้องถิ่น

ดังนั้นเพื่อแก้ไขปัญหาทั้งหมดที่ฉันต้องทำคือไปที่ที่เก็บของฉันและลบโฟลเดอร์ที่เกี่ยวข้อง. jar นั้นแล้วบังคับใช้update mavenใน Eclipse


1
สิ่งนี้ใช้ได้สำหรับฉันในขณะที่สิ่งข้างต้นไม่ได้ ปัญหาเกิดขึ้นเมื่อเพื่อนร่วมทีมของฉันอัปเดตเวอร์ชันของที่เก็บจาก pom
iaL

8

ดูเหมือนว่านี่เป็นปัญหาที่ทราบแล้ว (Bug 67414) ที่ได้รับการแก้ไขใน 3.0 ... มีคนแสดงความคิดเห็นว่ามันเกิดขึ้นสำหรับพวกเขาใน 3.4 เช่นกัน

ในเวลาเฉลี่ยการแก้ไขคือการลบไลบรารีระบบ JRE ออกจากโครงการและเพิ่มกลับเข้าไปอีกครั้ง

Here are the steps:

ไปที่คุณสมบัติของโครงการที่มีข้อผิดพลาดในการสร้าง (คลิกขวา> คุณสมบัติ)

ดูแท็บ "ไลบรารี" ในส่วน "สร้างเส้นทาง"

ค้นหา "JRE System Library" ในรายการ (หากนี่หายไปข้อความแสดงข้อผิดพลาดนี้ไม่ใช่ข้อผิดพลาด eclipse แต่เป็นโครงการที่กำหนดค่าผิดพลาด)

ลบ "JRE System Library"

กด "เพิ่มห้องสมุด ... " เลือก "ห้องสมุดระบบ JRE" และเพิ่ม JRE ที่เหมาะสมสำหรับโครงการ (เช่น 'พื้นที่ทำงานเริ่มต้น JRE')

กด "เสร็จสิ้น" ในการเลือกไลบรารีและ "ตกลง" ในคุณสมบัติโครงการแล้วรอการสร้างโครงการใหม่

หวังว่าข้อผิดพลาดจะได้รับการแก้ไข ...


ใช่ฉันมีปัญหาเดียวกันกับ spring-web-3.0.1.RELEASE ในขณะที่มันถูกลงทะเบียนเป็นการพึ่งพาใน pom.xml และทำงานเป็นผู้อ้างอิงในการอ้างอิงบางอย่างเมื่อฉันสร้าง http.csrf () ปิดการใช้งาน (). cors (). ปิดการใช้งาน (). httpBasic (). และ (). authorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). รับรองความถูกต้อง (); มันพังลงมาจากนั้นฉันดาวน์โหลดไฟล์ jar และนำเข้ามันด้วยวิธีดั้งเดิม
Tsakiroglou Fotis

5

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคลาสในไฟล์ jar ไม่เป็นไปตามโครงสร้างเดียวกันกับโครงสร้างโฟลเดอร์ของ jar

เช่นถ้าไฟล์คลาสของคุณมีแพ็คเกจ com.test.exam และคลาส. class ที่สร้างขึ้นจากไฟล์คลาสนี้จะมีโครงสร้างข้อผิดพลาด test.exam ... จะถูกโยนทิ้ง คุณต้องแก้ไขโครงสร้างแพ็คเกจของคลาสของคุณแล้วรวมไว้ในเส้นทางการสร้าง ecplipse ...



3

ฉันมีกรณีที่น่าสนใจของปัญหานี้กับ 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 เช่นกัน


2
ฉันกำลังประสบปัญหาเดียวกันกับ Eclipse โฟตอนรีลีส (4.8.0)
Delphin


2

หากคุณยังไม่พบสิ่งผิดปกติในการตั้งค่าคุณสามารถลองโครงการ -> ทำความสะอาดและทำความสะอาดโครงการทั้งหมดในพื้นที่ทำงาน

แก้ไข: ขออภัยไม่เห็นคำแนะนำของ verbose_mode ... สิ่งเดียวกัน


2

สำหรับฉันมันเกิดขึ้นเมื่อฉันอัพเกรด jdk ของฉันเป็น 1.8.0_60 ด้วยชุดเหยือกเก่าของฉันถูกใช้เป็นเวลานาน หากฉันย้อนกลับไปที่ jdk1.7.0_25 ปัญหาเหล่านี้จะหมดไป ดูเหมือนว่าปัญหาเกี่ยวกับความเข้ากันได้ระหว่าง JRE และไลบรารี


1

ฉันได้รับข้อผิดพลาดเมื่อฉันเพิ่งเปลี่ยนการตั้งค่า svn บางอย่างและไม่ใช่สิ่งใดในรหัส เพียงแค่ทำความสะอาดโครงการแก้ไขข้อผิดพลาด


1

ในกรณีของฉันฉันสร้างโครงการและทำมันและ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ไฟล์โดยอัตโนมัติ


1

อย่างรวดเร็วและง่ายดายฉันแก้ไขด้วยวิธีนี้ (ฉันใช้รุ่น ADT: v21.0.0-531062 ใน Windows XP Home Edition)

  1. เปิดไฟล์รายการ
  2. เปลี่ยน minSdkVersion โครงการที่มีอยู่เป็นค่าเดียวกันกับ maxSdkVersion (แนะนำ: มันอาจจะดีในการสร้างโครงการใหม่และดูว่า maxSdkVersion คืออะไร)
  3. บันทึกไฟล์รายการ
  4. คลิกขวาที่โครงการและเลือกสร้างโครงการ
  5. จากเมนูด้านบน: โครงการ - ล้าง .. - ทำเครื่องหมายเฉพาะโครงการที่เกี่ยวข้องด้านล่างฉันทำเครื่องหมายเริ่มการสร้างทันทีและสร้างเฉพาะโครงการที่เลือกและตกลง
  6. เปิดไฟล์ java - ไม่มีข้อผิดพลาดสีแดงอีกต่อไป!
  7. กลับไปที่ขั้นตอนที่ 1 ด้านบนและเปลี่ยนกลับ minSdkVersion เป็นค่าดั้งเดิม (เพื่อแทนที่รุ่น Android ให้มากที่สุดเท่าที่จะทำได้)

ใช้งานได้ แต่ปัญหากลับมาทุกสองสามวัน ฉันทำเช่นเดียวกับข้างต้นและมันแก้ปัญหาและช่วยให้ฉันพัฒนา


0

นอกเหนือจากสาเหตุที่แนะนำแล้วของไฟล์คลาสที่หายไปข้อผิดพลาดนี้ยังสามารถระบุไฟล์คลาสที่ซ้ำกัน eclipse รายงานข้อผิดพลาดนี้เมื่อไฟล์คลาสบนพา ธ บิลด์ใช้คลาสอื่นที่มีหลายนิยามในพา ธ บิลด์


0

เนื่องจากคุณให้รายละเอียดเล็ก ๆ น้อย ๆ กับเรามากที่สุดสิ่งที่คุณทำซึ่งเป็นความผิดพลาดอย่างง่ายที่จะทำก็คือแทนที่จะมุ่งไปที่

Build Path > Configure Build Path > Projects

และเพิ่มโฟลเดอร์โครงการเพิ่มเติมจากตรงนั้นแทนที่จะไปที่

Build Path > Configure Build Path > Libraries

และเพิ่มโฟลเดอร์โครงการของคุณจากที่นั่นแทน

นี่เป็นกรณีที่แน่นอนที่สุดหากรหัสของคุณถูกต้องทั้งหมด แต่เมื่อจัดระเบียบการนำเข้าใหม่โดยอัตโนมัติผ่านctrl+spaceทางลัดแทนคำสั่งการนำเข้าของคุณที่อ้างถึง com.your.additionalproject การอ้างอิงของคุณชี้ไปที่ bin.com.your.additionalproject

หมายเหตุถังขยะ หมายความว่าคุณหมายถึงคลาสของคุณโดยทางอ้อมโดยใช้โครงสร้างโฟลเดอร์โครงการอื่นของคุณเป็นไลบรารีทำให้ IDE ของคุณทำหน้าที่ทั้งหมดในการค้นหาคลาสไบนารีที่คุณกำลังอ้างอิง

หากต้องการแก้ไขให้ลบโฟลเดอร์ออกจากไลบรารีและเพิ่มเข้าไปใหม่ภายใต้แท็บโครงการและจัดระเบียบการนำเข้าของคุณใหม่ โครงการของคุณควรจะทำงานได้ดี


0

เมื่อฉันใช้เวอร์ชัน eclipse ใหม่และพยายามใช้พื้นที่ทำงานก่อนหน้าซึ่งฉันใช้กับเวอร์ชัน eclipse เก่าข้อผิดพลาดนี้เกิดขึ้น

นี่คือวิธีที่ฉันแก้ปัญหา:

คลิกขวาที่โปรเจ็กต์ของฉันบน Package Explorer -> Properties -> Java Build Path -> Libraries -> ฉันเห็นข้อผิดพลาด (Cross Sign) บน JRE System Library เนื่องจากไม่พบเส้นทาง -> ดับเบิลคลิกที่ไลบรารีระบบ JRE -> เลือกตัวเลือก "เวิร์กสเปซดีฟอลต์ JRE" -> เสร็จสิ้น -> ตกลง -> BUM กำลังทำงานอยู่

FYI


0

ในกรณีของฉันมันเป็นผลมาจากการเพิ่มการพึ่งพาใหม่ของฉัน pom.xmlไฟล์

การพึ่งพาใหม่ขึ้นอยู่กับไลบรารีเวอร์ชันเก่า (2.5) ห้องสมุดเดียวกันนั้นต้องการห้องสมุดอื่นในของฉันpom.xmlแต่มันต้องการเวอร์ชัน 3.0

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

ในกรณีของฉันมันง่ายเหมือนการล็อคเวอร์ชั่นใหม่ คุณสามารถทำได้โดยคลิกขวาที่รายการ - มีตัวเลือกในการล็อคมันลงในเมนูบริบท


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