ฉันดาวน์โหลดซอฟต์แวร์โอเพนซอร์ซบางตัวที่เขียนด้วยภาษาจาวาและพยายามรวบรวมโดยใช้ Eclipse ฉันได้รับข้อผิดพลาด: " ลำดับชั้นของประเภท 'ชื่อคลาส' ไม่สอดคล้องกัน " ในบางไฟล์ สาเหตุของข้อผิดพลาดเหล่านี้คืออะไรและฉันจะแก้ไขได้อย่างไร
ฉันดาวน์โหลดซอฟต์แวร์โอเพนซอร์ซบางตัวที่เขียนด้วยภาษาจาวาและพยายามรวบรวมโดยใช้ Eclipse ฉันได้รับข้อผิดพลาด: " ลำดับชั้นของประเภท 'ชื่อคลาส' ไม่สอดคล้องกัน " ในบางไฟล์ สาเหตุของข้อผิดพลาดเหล่านี้คืออะไรและฉันจะแก้ไขได้อย่างไร
คำตอบ:
หมายความว่าคุณกำลังพยายามใช้อินเทอร์เฟซที่ไม่มีอยู่หรือคุณกำลังขยายคลาสที่ไม่มีอยู่
ลองรีเฟรช Eclipse ของคุณ
หากไม่ได้ผลอาจหมายความว่าคุณมีการอ้างอิงไปยัง JAR ที่ไม่ได้อยู่ในเส้นทางการสร้าง ตรวจสอบ classpath ของโครงการของคุณและตรวจสอบว่าไหที่มีอินเตอร์เฟซหรือคลาสอยู่ในนั้น
บางครั้งมันเกิดขึ้นเมื่อคุณเพิ่มไหที่คุณต้องการ แต่ไม่รวมไหที่ต้องการ ในกรณีของฉันเพิ่มขวดทั้งหมดใน Tomcat / lib ช่วยฉันแก้ปัญหานี้ ฉันกำลังทำงานกับเว็บแอพ
ตรวจสอบข้อผิดพลาดของคุณ (แท็บ "เครื่องหมาย") ฉันก็มีข้อผิดพลาดดังต่อไปนี้:
ที่เก็บสำหรับไลบรารีที่ต้องการในโครงการไม่สามารถอ่านได้ ...
และเมื่อนั้นได้รับการแก้ไข "ไม่สอดคล้องกันข้อผิดพลาด" หายไป
ที่จริงฉันเพิ่มไหไปที่เส้นทางการสร้าง แต่ด้วยเหตุผลบางอย่างพวกเขาไม่สามารถอ่านได้ด้วยข้อผิดพลาด
ที่เก็บสำหรับไลบรารีที่ต้องการในโครงการไม่สามารถอ่านได้หรือไม่ใช่ไฟล์ ZIP ที่ถูกต้อง
ดังนั้นฉันจึงเพิ่มพวกเขาเป็น "ไหภายนอก" แทน ที่ช่วยและปัญหาการคอมไพล์ทั้งหมดไม่มีอีกต่อไป!
ฉันมีปัญหานี้หลังจากอัพเกรด JDK เป็นเวอร์ชั่นใหม่ ฉันต้องอัพเดตการอ้างอิงไปยังไลบรารีใน Project Properties / Java Build Path
อีกหนึ่งกรณีที่ฉันมี ระบุพา ธ โครงการที่ถูกต้องและนำเข้าสู่ eclipse
จากนั้นไปที่ Project -> Clean -> Clean project ทั้งหมด
คุณควรล้างโครงการหรือรีสตาร์ท Eclipse
คุณจะเห็นข้อผิดพลาดนี้ในกรณีที่บางคลาสในไฟล์ไลบรารีของคุณที่คุณมีใน classpath มีการอ้างอิงถึงคลาสที่ไม่มีอยู่ซึ่งอาจอยู่ในไฟล์ jar อื่น ที่นี่ฉันได้รับข้อผิดพลาดนี้เมื่อฉันไม่ได้เพิ่มorg.springframework.beans-3.1.2.RELEASE.jar
และขยายชั้นเรียนจากorg.springframework.jdbc.core.support.JdbcDaoSupport
ที่อยู่ในorg.springframework.jdbc-3.1.2.RELEASE.jar
classpath ของฉัน
ปัญหาอาจเกิดจากการที่คุณใส่ไหที่ไม่ถูกต้อง ฉันมีปัญหาเดียวกันและเหตุผลคือฉันได้รวมไลบรารี JRE เริ่มต้นที่ไม่ถูกต้องในเส้นทางการสร้างของโครงการ ฉันติดตั้ง Java ด้วยรุ่นอื่นและรวมไฟล์ JRE ของ Java ด้วยรุ่นอื่น (ฉันได้ติดตั้ง JRE 1.6 ในระบบของฉันและมี JRE library 1.7 รวมอยู่ใน build path เนื่องจาก Java ที่ติดตั้งไว้ก่อนหน้านี้) คุณสามารถตรวจสอบว่าไลบรารี JRE ที่คุณรวมอยู่ใน build path นั้นเป็นเวอร์ชั่นที่ถูกต้องหรือไม่ ของเวอร์ชัน Java ที่คุณติดตั้งในระบบของคุณ
ฉันเคยประสบปัญหานี้กับ Eclipse Juno แล้วสาเหตุที่แท้จริงคือแม้ว่าขวดสปริงบางตัวจะถูกรวมอยู่ด้วยการพึ่งพา Maven ชั่วคราวพวกเขารวมอยู่ในรุ่นที่ไม่ถูกต้อง
ดังนั้นคุณควรตรวจสอบว่าการใช้เฟรมเวิร์กแบบโมดูลเป็นสปริงที่ทุกโมดูล (หรืออย่างน้อยสำคัญที่สุด: แกน, ถั่ว, บริบท, aop, TX, ฯลฯ ) อยู่ในรุ่นเดียวกัน
เพื่อแก้ปัญหาฉันได้ใช้การยกเว้นแบบพึ่งพา Maven เพื่อหลีกเลี่ยงการพึ่งพาแบบชั่วคราว
ข้อผิดพลาด: ลำดับชั้นของประเภท "class name" เป็นข้อผิดพลาดที่ไม่สอดคล้องกัน
วิธีการแก้ปัญหา: ระดับOtherDepJar {} -> อยู่ภายใน "other.dep.jar"
ระดับDepJarขยาย OtherDepJar {} -> อยู่ภายใน"dep.jar"
คลาส ProblematicClass ขยาย DepJar {} -> อยู่ในโครงการปัจจุบัน
หาก dep.jar อยู่ใน classpath ของโครงการ แต่ other.dep.jar ไม่ได้อยู่ใน classpath ของโครงการ Eclipse จะแสดง "ลำดับชั้นของประเภท ... เป็นข้อผิดพลาดที่ไม่สอดคล้องกัน"
สำหรับฉันปัญหานี้เกิดจากการนำเข้าผิด ในความเป็นจริงเราจำเป็นต้องอัพเดตการนำเข้าหลังจากเพิ่มไลบรารีการสนับสนุน v7
สามารถแก้ไขได้โดยทำดังนี้สำหรับแต่ละชั้นเรียนของโครงการของคุณ :
import android.[*]
ในแต่ละชั้นเรียนandroid.support.[*]
(และไม่android.[*]
)เป็นเพราะการพึ่งพาที่ขาดหายไปซึ่งไม่ได้อยู่ใน 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>
หากคลาสที่ขยายเพิ่มมีปัญหาข้อความแสดงข้อผิดพลาดด้านบนจะปรากฏขึ้น
ตัวอย่าง
class Example extends Example1 {
}
แก้ไขปัญหาใน Example1
ฉันมีเครื่องหมายปัญหาที่แน่นอนเหมือนกันและแก้ไขได้โดยการลบคำอธิบายประกอบ @Override ออกจากวิธีการซึ่งเป็นความจริงแล้วคือการใช้งานครั้งแรก
ในกรณีของฉันการอ้างอิงการนำเข้าในหลายชั้นมีคำพิเศษ ฉันแก้ไขมันโดยแก้ไขไฟล์ทั้งหมดเพื่อให้มีการนำเข้าที่ถูกต้อง ฉันเริ่มทำการแก้ไขด้วยตนเอง แต่เมื่อฉันเห็นรูปแบบฉันจะทำมันอัตโนมัติด้วยการค้นหา .. แทนที่ด้วยคราส วิธีนี้แก้ไขข้อผิดพลาด
สำหรับฉันแล้วมันเปลี่ยนระดับ Android API เป็นระดับเดียวกับ Google API
ฉันมีปัญหานี้เช่นกัน ... ฉันพบว่าลำดับชั้นของคลาสที่ขว้างข้อยกเว้นนี้ไม่สามารถสืบย้อนกลับไปยังรูทของคลาสด้วยคราส ... ฉันอธิบาย:
ในกรณีของฉันฉันมี 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" ทุกอย่างกลับไปเป็นปกติ ...
ฉันมีคลาสที่ขยาย LabelProvider ในโครงการที่มี OSGi มีข้อผิดพลาดเกิดขึ้น วิธีแก้ไขคือ: การเพิ่ม org.eclipse.jface ไปยังปลั๊กอินที่ต้องการใน manifest.mf แทนที่จะนำเข้าแพ็คเกจเดียวเช่น org.eclipse.jface.viewers
ถ้าคุณกำลังอิมพอร์ตโปรเจ็กต์ eclipse เพียง 1 ไปที่การตั้งค่าพา ธ การบิลด์ java build ภายใต้คุณสมบัติโปรเจ็กต์ 2. ในกรณีที่ไลบรารี JRE System มีเครื่องหมายแสดงข้อผิดพลาดติดอยู่ให้คลิกสองครั้งเพื่อเปิดหน้าต่างแก้ไขไลบรารี 3. เปลี่ยนสภาพแวดล้อมการดำเนินการเป็นจาวาเวอร์ชันที่ถูกต้องของระบบหรือเลือกแก้ไขการตั้งค่าอื่น ๆ โดยตรวจสอบการกำหนดปุ่มตัวเลือก ถึงพวกเขา. 4. คลิกเสร็จสิ้น
เมื่อนำเข้าโครงการ GWT ใน Eclipse โดยไม่ต้องติดตั้ง "Google Plugin for Eclipse" สิ่งนี้จะเกิดขึ้น หลังจากติดตั้ง "Google Plugin for Eclipse" ข้อผิดพลาดนี้จะหายไป
คลิกขวาที่โฟลเดอร์โครงการและเลือก "Java Build Path" ใต้ "Java Build Path" คุณควรจะเห็นไลบรารี่ Eclipse จะแสดงข้อผิดพลาดในไลบรารีเหล่านั้น การแก้ไขปัญหาเหล่านั้นจะช่วยในการแก้ไขปัญหา
ฉันมีข้อผิดพลาดนี้หลังจากทำการรวมคอมไพล์จากสาขาที่ชั้นเรียนของฉันขยายอินเทอร์เฟซใหม่ การรีเฟรช (F5) File-Tree ในเฟรมPackage Explorerของ Eclipse นั้นเพียงพอแล้ว
ดูเหมือนว่า Eclipse จะไม่อัพเดตทุกอย่างอย่างถูกต้องดังนั้นคลาสจึงขยายส่วนต่อประสานที่ไม่มีอยู่ หลังจากรีเฟรชข้อผิดพลาดทั้งหมดจะหายไป
ฉันต้องเปลี่ยนจาก Eclipse Oxygen ที่ฉันได้รับจาก IBM และใช้ IBM JDK 8 เป็น Eclipse Photon และ Oracle JDK 8 ฉันกำลังทำงานเกี่ยวกับการปรับแต่ง Java สำหรับ maximo.
Maven
>Download Source
การพึ่งพาในคำถาม