ข้อผิดพลาดในการรวบรวม Eclipse: ลำดับชั้นของประเภท 'ชื่อคลาส' ไม่สอดคล้องกัน


139

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

คำตอบ:


161

หมายความว่าคุณกำลังพยายามใช้อินเทอร์เฟซที่ไม่มีอยู่หรือคุณกำลังขยายคลาสที่ไม่มีอยู่

ลองรีเฟรช Eclipse ของคุณ

หากไม่ได้ผลอาจหมายความว่าคุณมีการอ้างอิงไปยัง JAR ที่ไม่ได้อยู่ในเส้นทางการสร้าง ตรวจสอบ classpath ของโครงการของคุณและตรวจสอบว่าไหที่มีอินเตอร์เฟซหรือคลาสอยู่ในนั้น


2
ฉันก็มีการพึ่งพา Maven ซึ่งก่อให้เกิดข้อผิดพลาดนี้ใน Spring Tool Suite การแก้ปัญหาคือการทำMaven> Download Sourceการพึ่งพาในคำถาม
MrLore

รุ่งโรจน์ถึงคุณ @lagrantmere
Shailesh Pratapwar

2
ตรวจสอบว่าผู้ปกครองได้รับการรวบรวม ในกรณีของฉันฉันรู้ว่า superclass มีอยู่จริง แต่มันก็ไม่ได้รับการรวบรวมอย่างถูกต้อง
Joseph Rajeev Motha

2
ฉันมีคลาสที่ขยายคลาสนามธรรมซึ่งใช้อินเทอร์เฟซที่หายไป (เปลี่ยนชื่อจากคราส) ที่ขาดหายไป
Aquarius Power

4
ในกรณีของฉันฉันกำลังขยายคลาสที่ WAS ในเส้นทางคลาส (jar) แต่ขยายคลาสที่สามที่อยู่ใน jar อื่นที่ไม่ได้อยู่ใน classpath ของฉัน
JustinKSU

15

บางครั้งมันเกิดขึ้นเมื่อคุณเพิ่มไหที่คุณต้องการ แต่ไม่รวมไหที่ต้องการ ในกรณีของฉันเพิ่มขวดทั้งหมดใน Tomcat / lib ช่วยฉันแก้ปัญหานี้ ฉันกำลังทำงานกับเว็บแอพ


ขอบคุณนี่เป็นปัญหาของฉัน ฉันรวม GWT libs แล้ว แต่ไม่มี Java servlet API jar (servlet-api-3.1.jar จาก Jetty ในกรณีนี้)
เจมี่

13

ตรวจสอบข้อผิดพลาดของคุณ (แท็บ "เครื่องหมาย") ฉันก็มีข้อผิดพลาดดังต่อไปนี้:

ที่เก็บสำหรับไลบรารีที่ต้องการในโครงการไม่สามารถอ่านได้ ...

และเมื่อนั้นได้รับการแก้ไข "ไม่สอดคล้องกันข้อผิดพลาด" หายไป

ที่จริงฉันเพิ่มไหไปที่เส้นทางการสร้าง แต่ด้วยเหตุผลบางอย่างพวกเขาไม่สามารถอ่านได้ด้วยข้อผิดพลาด

ที่เก็บสำหรับไลบรารีที่ต้องการในโครงการไม่สามารถอ่านได้หรือไม่ใช่ไฟล์ ZIP ที่ถูกต้อง

ดังนั้นฉันจึงเพิ่มพวกเขาเป็น "ไหภายนอก" แทน ที่ช่วยและปัญหาการคอมไพล์ทั้งหมดไม่มีอีกต่อไป!


5

ฉันมีปัญหานี้หลังจากอัพเกรด JDK เป็นเวอร์ชั่นใหม่ ฉันต้องอัพเดตการอ้างอิงไปยังไลบรารีใน Project Properties / Java Build Path


4

อีกหนึ่งกรณีที่ฉันมี ระบุพา ธ โครงการที่ถูกต้องและนำเข้าสู่ eclipse

จากนั้นไปที่ Project -> Clean -> Clean project ทั้งหมด



2

คุณจะเห็นข้อผิดพลาดนี้ในกรณีที่บางคลาสในไฟล์ไลบรารีของคุณที่คุณมีใน classpath มีการอ้างอิงถึงคลาสที่ไม่มีอยู่ซึ่งอาจอยู่ในไฟล์ jar อื่น ที่นี่ฉันได้รับข้อผิดพลาดนี้เมื่อฉันไม่ได้เพิ่มorg.springframework.beans-3.1.2.RELEASE.jarและขยายชั้นเรียนจากorg.springframework.jdbc.core.support.JdbcDaoSupportที่อยู่ในorg.springframework.jdbc-3.1.2.RELEASE.jarclasspath ของฉัน


2

ปัญหาอาจเกิดจากการที่คุณใส่ไหที่ไม่ถูกต้อง ฉันมีปัญหาเดียวกันและเหตุผลคือฉันได้รวมไลบรารี JRE เริ่มต้นที่ไม่ถูกต้องในเส้นทางการสร้างของโครงการ ฉันติดตั้ง Java ด้วยรุ่นอื่นและรวมไฟล์ JRE ของ Java ด้วยรุ่นอื่น (ฉันได้ติดตั้ง JRE 1.6 ในระบบของฉันและมี JRE library 1.7 รวมอยู่ใน build path เนื่องจาก Java ที่ติดตั้งไว้ก่อนหน้านี้) คุณสามารถตรวจสอบว่าไลบรารี JRE ที่คุณรวมอยู่ใน build path นั้นเป็นเวอร์ชั่นที่ถูกต้องหรือไม่ ของเวอร์ชัน Java ที่คุณติดตั้งในระบบของคุณ


2

ฉันเคยประสบปัญหานี้กับ Eclipse Juno แล้วสาเหตุที่แท้จริงคือแม้ว่าขวดสปริงบางตัวจะถูกรวมอยู่ด้วยการพึ่งพา Maven ชั่วคราวพวกเขารวมอยู่ในรุ่นที่ไม่ถูกต้อง

ดังนั้นคุณควรตรวจสอบว่าการใช้เฟรมเวิร์กแบบโมดูลเป็นสปริงที่ทุกโมดูล (หรืออย่างน้อยสำคัญที่สุด: แกน, ถั่ว, บริบท, aop, TX, ฯลฯ ) อยู่ในรุ่นเดียวกัน

เพื่อแก้ปัญหาฉันได้ใช้การยกเว้นแบบพึ่งพา Maven เพื่อหลีกเลี่ยงการพึ่งพาแบบชั่วคราว


2

ข้อผิดพลาด: ลำดับชั้นของประเภท "class name" เป็นข้อผิดพลาดที่ไม่สอดคล้องกัน

วิธีการแก้ปัญหา: ระดับOtherDepJar {} -> อยู่ภายใน "other.dep.jar"

ระดับDepJarขยาย OtherDepJar {} -> อยู่ภายใน"dep.jar"

คลาส ProblematicClass ขยาย DepJar {} -> อยู่ในโครงการปัจจุบัน

หาก dep.jar อยู่ใน classpath ของโครงการ แต่ other.dep.jar ไม่ได้อยู่ใน classpath ของโครงการ Eclipse จะแสดง "ลำดับชั้นของประเภท ... เป็นข้อผิดพลาดที่ไม่สอดคล้องกัน"


1

สำหรับฉันปัญหานี้เกิดจากการนำเข้าผิด ในความเป็นจริงเราจำเป็นต้องอัพเดตการนำเข้าหลังจากเพิ่มไลบรารีการสนับสนุน v7

สามารถแก้ไขได้โดยทำดังนี้สำหรับแต่ละชั้นเรียนของโครงการของคุณ :

  1. ลบบรรทัดทั้งหมดด้วยimport android.[*]ในแต่ละชั้นเรียน
  2. จัดระเบียบการนำเข้าของคุณใหม่: จากเมนูบริบทให้เลือกที่มา / จัดระเบียบการนำเข้าหรือ (CTRL + SHIFT + O)
  3. เมื่อได้รับแจ้งให้เลือกไลบรารีandroid.support.[*](และไม่android.[*])

1

เป็นเพราะการพึ่งพาที่ขาดหายไปซึ่งไม่ได้อยู่ใน maven pom.xml ของฉัน

ตัวอย่างเช่นฉันต้องการสร้างการทดสอบการรวมสำหรับการใช้งานไซต์สาธิตอีคอมเมิร์ซแบบกว้างของฉัน

ฉันรวมขวดใบกว้างด้วยการทดสอบการรวมจากการค้าใบกว้างเพื่อนำไฟล์การกำหนดค่าและชั้นการทดสอบพื้นฐานมาใช้ใหม่ โครงการนั้นมีการพึ่งพาการทดสอบอื่น ๆ ที่ฉันไม่ได้รวมและฉันได้รับข้อผิดพลาด "ลำดับชั้นไม่สอดคล้องกัน"

หลังจากคัดลอก "test dependencies" จาก broadleaf / pom.xml และตัวแปรคุณสมบัติที่เกี่ยวข้องซึ่งจัดเตรียมเวอร์ชันสำหรับแต่ละการพึ่งพาใน broadleaf / pom.xml ข้อผิดพลาดก็หายไป

คุณสมบัติคือ:

    <geb.version>0.9.3</geb.version>
    <spock.version>0.7-groovy-2.0</spock.version>
    <selenium.version>2.42.2</selenium.version>
    <groovy.version>2.1.8</groovy.version>

การพึ่งพาคือ:

<dependency>
            <groupId>org.broadleafcommerce</groupId>
            <artifactId>integration</artifactId>
            <type>jar</type>
            <classifier>tests</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.broadleafcommerce</groupId>
            <artifactId>broadleaf-framework</artifactId>
            <version>${blc.version}</version><!--$NO-MVN-MAN-VER$ -->
            <classifier>tests</classifier>
        </dependency>
        <dependency>
            <groupId>com.icegreen</groupId>
            <artifactId>greenmail</artifactId>
            <version>1.3</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>2.5.1</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymockclassextension</artifactId>
            <version>2.4</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>5.9</version>
            <type>jar</type>
            <classifier>jdk15</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.gebish</groupId>
            <artifactId>geb-core</artifactId>
            <version>${geb.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.gebish</groupId>
            <artifactId>geb-spock</artifactId>
            <version>${geb.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>${spock.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-support</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-firefox-driver</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
  <!-- Logging -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <version>2.3.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>

1

หากคลาสที่ขยายเพิ่มมีปัญหาข้อความแสดงข้อผิดพลาดด้านบนจะปรากฏขึ้น

ตัวอย่าง

class Example extends Example1 {

}

แก้ไขปัญหาใน Example1


1

ฉันมีเครื่องหมายปัญหาที่แน่นอนเหมือนกันและแก้ไขได้โดยการลบคำอธิบายประกอบ @Override ออกจากวิธีการซึ่งเป็นความจริงแล้วคือการใช้งานครั้งแรก


1

ในกรณีของฉันการอ้างอิงการนำเข้าในหลายชั้นมีคำพิเศษ ฉันแก้ไขมันโดยแก้ไขไฟล์ทั้งหมดเพื่อให้มีการนำเข้าที่ถูกต้อง ฉันเริ่มทำการแก้ไขด้วยตนเอง แต่เมื่อฉันเห็นรูปแบบฉันจะทำมันอัตโนมัติด้วยการค้นหา .. แทนที่ด้วยคราส วิธีนี้แก้ไขข้อผิดพลาด



0

ฉันมีปัญหานี้เช่นกัน ... ฉันพบว่าลำดับชั้นของคลาสที่ขว้างข้อยกเว้นนี้ไม่สามารถสืบย้อนกลับไปยังรูทของคลาสด้วยคราส ... ฉันอธิบาย:

ในกรณีของฉันฉันมี 3 โครงการจาวา: A, B และ C ... โดยที่ A และ B เป็นโครงการ maven และ C เป็นโครงการ Java eclipse ปกติ ...

ในโครงการ A ฉันมีอินเทอร์เฟซ "interfaceA" ... ในโครงการ B ฉันมีอินเทอร์เฟซ "interfaceB" ที่ขยาย "interfaceA" ในโครงการ C ฉันมีคลาสคอนกรีต "classC" ที่ใช้ "interfaceB"

"project C" รวมถึง "project B" ใน build พา ธ แต่ไม่ใช่ "project A" (ดังนั้นจึงเป็นสาเหตุของข้อผิดพลาด) .... หลังจากรวม "project A" ไว้ใน build path ของ "C" ทุกอย่างกลับไปเป็นปกติ ...


0

ฉันมีคลาสที่ขยาย LabelProvider ในโครงการที่มี OSGi มีข้อผิดพลาดเกิดขึ้น วิธีแก้ไขคือ: การเพิ่ม org.eclipse.jface ไปยังปลั๊กอินที่ต้องการใน manifest.mf แทนที่จะนำเข้าแพ็คเกจเดียวเช่น org.eclipse.jface.viewers


0

ถ้าคุณกำลังอิมพอร์ตโปรเจ็กต์ eclipse เพียง 1 ไปที่การตั้งค่าพา ธ การบิลด์ java build ภายใต้คุณสมบัติโปรเจ็กต์ 2. ในกรณีที่ไลบรารี JRE System มีเครื่องหมายแสดงข้อผิดพลาดติดอยู่ให้คลิกสองครั้งเพื่อเปิดหน้าต่างแก้ไขไลบรารี 3. เปลี่ยนสภาพแวดล้อมการดำเนินการเป็นจาวาเวอร์ชันที่ถูกต้องของระบบหรือเลือกแก้ไขการตั้งค่าอื่น ๆ โดยตรวจสอบการกำหนดปุ่มตัวเลือก ถึงพวกเขา. 4. คลิกเสร็จสิ้น


0

เมื่อนำเข้าโครงการ GWT ใน Eclipse โดยไม่ต้องติดตั้ง "Google Plugin for Eclipse" สิ่งนี้จะเกิดขึ้น หลังจากติดตั้ง "Google Plugin for Eclipse" ข้อผิดพลาดนี้จะหายไป


0

คลิกขวาที่โฟลเดอร์โครงการและเลือก "Java Build Path" ใต้ "Java Build Path" คุณควรจะเห็นไลบรารี่ Eclipse จะแสดงข้อผิดพลาดในไลบรารีเหล่านั้น การแก้ไขปัญหาเหล่านั้นจะช่วยในการแก้ไขปัญหา


0

ฉันมีข้อผิดพลาดนี้หลังจากทำการรวมคอมไพล์จากสาขาที่ชั้นเรียนของฉันขยายอินเทอร์เฟซใหม่ การรีเฟรช (F5) File-Tree ในเฟรมPackage Explorerของ Eclipse นั้นเพียงพอแล้ว

ดูเหมือนว่า Eclipse จะไม่อัพเดตทุกอย่างอย่างถูกต้องดังนั้นคลาสจึงขยายส่วนต่อประสานที่ไม่มีอยู่ หลังจากรีเฟรชข้อผิดพลาดทั้งหมดจะหายไป


0

ฉันต้องเปลี่ยนจาก Eclipse Oxygen ที่ฉันได้รับจาก IBM และใช้ IBM JDK 8 เป็น Eclipse Photon และ Oracle JDK 8 ฉันกำลังทำงานเกี่ยวกับการปรับแต่ง Java สำหรับ .

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