แพ็กเกจที่ประกาศไม่ตรงกับแพ็กเกจที่คาดไว้“”


91

ฉันใช้ Eclipse และไม่ได้ใช้ Java มาระยะหนึ่ง อย่างไรก็ตามฉันสามารถรวบรวมรหัสของฉันในบรรทัดคำสั่งได้ดีและสร้างไฟล์.classไฟล์ที่ใน Eclipse มันบ่นว่าThe declared package "Devices" does not match the expected package ""ก็บ่นว่า สิ่งนี้หมายความว่าอย่างไรและฉันจะแก้ไขได้อย่างไร

โค้ดตัวอย่าง:

package Devices;

public final class DevFrequency 
{
    public short messageID;
    public double frequency;
    public short converterID;
    public DevFrequency() 
    {
    }
    public DevFrequency(short _messageID,double _frequency,short _converterID)
    {
        messageID = _messageID;
        frequency = _frequency;
        converterID = _converterID;
    }
}

ชื่อโครงการของฉันคือDeviceDDS.


2
คลาสนี้อยู่ใน/src/Convertersไดเร็กทอรีหรือไม่?
Jeremy

7
หากคุณกำลังจะเปลี่ยนคำถามย้อนหลัง (ซึ่งดูเหมือนไม่มีจุดหมาย แต่ตามความจริง) คุณต้องมีความสอดคล้องกัน - คุณยังไม่ได้แก้ไขย่อหน้าแรกของคำถาม คุณยังทำให้ความคิดเห็นทั้งหมดดูแปลก ๆ ทำไมทุกอย่างเปลี่ยนไปเกือบปีครึ่งต่อมา?
Jon Skeet

คำตอบ:


52

Eclipse คาดว่าแพ็กเกจที่ประกาศจะตรงกับลำดับชั้นของไดเร็กทอรี - ดังนั้นจึงคาดว่าไฟล์ Java ของคุณจะอยู่ในไดเร็กทอรีที่เรียกว่า "Devices" ภายใต้รากต้นทางของคุณ ในขณะนี้ดูเหมือนว่าไฟล์อยู่ในรูทต้นทางของคุณโดยตรง ดังนั้นสร้างไดเร็กทอรีที่เหมาะสมและย้ายไฟล์ไปที่นั่น

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

com.foo.devices;

3
@ Sakti: คุณทำไม่ได้เท่าที่ฉันรู้และฉันขอแนะนำอย่างยิ่งว่าอย่าทำแม้ว่าคุณจะทำได้ นักพัฒนา Java ที่มีประสบการณ์ทั้งหมดจะคาดหวังให้คุณปฏิบัติตามอนุสัญญาปกติ
Jon Skeet

90

ลองปิดและเปิดไฟล์ใหม่

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


2
มีปัญหานี้กับโครงการ Gradle ภายใน VS Code เปิดใหม่แก้ไขแล้ว
TastyWheat

2
การเปิดและปิดไฟล์ในตัวแก้ไข eclipse ช่วยแก้ปัญหาได้ ฉันได้เพิ่มซอร์สโฟลเดอร์ในแท็บ java config build - source แล้วข้อผิดพลาดไม่ได้ถูกลบออก แต่เมื่อฉันปิดและเปิดเอดิเตอร์ใน eclipse มันช่วยได้ :-)
JassJava

1
การออกและรีสตาร์ท eclipse ช่วยแก้ปัญหาด้วย
Don Smith

1
เขา .. ฉันใช้เวลาหนึ่งชั่วโมงในการพยายามแก้ไขและจากนั้นก็เห็นสิ่งนี้
Vikash

@candied_orange ขอบคุณค่ะ การปิดและเปิดไฟล์หลาย ๆ ครั้งก็แก้ไขให้ฉันเช่นกัน
raikumardipak

44

โซลูชันที่ 1:โซลูชันหนึ่งที่ใช้ได้ผลสำหรับฉันเมื่อเกิดข้อผิดพลาด " แพ็กเกจที่ประกาศไม่ตรงกับแพ็กเกจที่คาดไว้ " สำหรับโปรเจ็กต์ที่ฉันเช็คเอาต์จาก eclipse CVS:

1.Right คลิกโครงการในแถบนำทางและคลิก 'ลบ'
2.Make แน่ใจว่า ' เนื้อหาโครงการ Delete บนดิสก์ ' ตัวเลือกไม่ได้ตรวจสอบและคลิก OK
3. หลังจากลบโปรเจ็กต์แล้วให้ไปที่ไฟล์ -> นำเข้า -> ทั่วไป -> โปร
เจ็กต์ที่มีอยู่ในเวิร์กสเปซ 4. เลือกพื้นที่ทำงานของคุณจากรายการไดเร็กทอรีและทำเครื่องหมายที่ช่องถัดจากชื่อโปรเจ็กต์ของคุณ คลิก ' เสร็จสิ้น '

โซลูชันที่ 2:อีกครั้งฉันได้รับข้อผิดพลาดนี้พร้อมข้อความต่อไปนี้

ข้อผิดพลาดการสร้าง Eclipse - java.lang.Object ไม่สามารถแก้ไขได้ ฉันต้องทำตามเส้นทางอื่นที่กล่าวถึงที่นี่และข้อผิดพลาดก็หายไป

ในเวลานั้นวิธีแก้ปัญหาคือการลบ JRE System Library ออกจากโปรเจ็กต์แล้วเพิ่มกลับเข้าไปอีกครั้ง ขั้นตอนมีดังนี้

  1. ไปที่คุณสมบัติของโปรเจ็กต์ที่มีข้อผิดพลาดในการสร้าง (คลิกขวา> คุณสมบัติ) ดูแท็บ "ไลบรารี" ในส่วน "สร้างเส้นทาง" ค้นหา "JRE System Library" ในรายการ (หากสิ่งนี้หายไปแสดงว่าข้อความแสดงข้อผิดพลาดนี้ไม่ใช่ ข้อผิดพลาดของคราส แต่โครงการที่กำหนดค่าผิดพลาด)
  2. ลบ "JRE System Library"
  3. กด "Add Library ... " เลือก "JRE System Library" และเพิ่ม JRE ที่เหมาะสมสำหรับโปรเจ็กต์ (เช่น 'Workspace default JRE')
  4. กด "เสร็จสิ้น" ในการเลือกไลบรารีและ "ตกลง" ในคุณสมบัติโครงการจากนั้นรอการสร้างโครงการใหม่

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


ฉันต้องทำเช่นนี้ด้วย (เพิ่มไดเร็กทอรีของการทดสอบที่น่ากลัวลงในบิลด์) อย่าลืมจดบันทึกเกี่ยวกับการกำหนดค่าการวิ่งของคุณซึ่งคุณจะต้องสร้างขึ้นใหม่ มีความคิดว่าทำไมจึงจำเป็น? ช่างเป็นความเจ็บปวด
Joshua Goldberg

11
วิธีแก้ปัญหาที่ง่ายกว่า: ฉันอยู่ในสถานการณ์นี้อีกครั้งและสามารถทำให้มันทำงานได้โดยการปิดโปรเจ็กต์รีสตาร์ท Eclipse และเปิดโปรเจ็กต์ใหม่
Joshua Goldberg

12
ง่ายยิ่งขึ้น! ฉันเพิ่งได้มันอีกครั้งและมันก็หายไปโดยการปิดและเปิดตัวแก้ไขไฟล์เดียวที่มีปัญหา
Joshua Goldberg

4
การรีสตาร์ท eclipse ดูเหมือนจะแก้ไขได้
Mike R

โซลูชันที่ 1 ใช้ได้ผลสำหรับฉัน แปลกมาก. ฉันได้นำเข้า git clone เดียวกันไปยัง Eclipse บนเครื่องอื่นและไม่พบปัญหานี้
dnuttle

13

ฉันแก้ไขปัญหาโดยทำตามขั้นตอนเหล่านี้:

  1. เลือกโครงการ - คลิกขวา - java build path

  2. ในแท็บแหล่งที่มา - คุณเปลี่ยนไปsrcsrc/main/java

  3. Eclipse จะจัดลำดับโปรเจ็กต์ใหม่ทั้งหมด


11

ฉันมีปัญหานี้ - คลาสอื่น ๆ ในแพ็คเกจของฉันใช้ได้ดี แต่คลาสหนึ่งมีข้อผิดพลาดเกิดขึ้น ไม่มีอะไรผิดปกติกับการแจ้งพัสดุ

ฉันแก้ไขโดยการทำrefactor->moveและย้ายคลาสไปยังแพ็คเกจอื่นชั่วคราวจากนั้นrefactor->moveกลับไปที่แพ็คเกจเดิม



2

สร้างแพ็กเกจใหม่ภายใต้โปรเจ็กต์ของคุณชื่อ "อุปกรณ์" และจัดชั้นเรียนไว้ในนั้น ซึ่งเทียบเท่ากับคลาสที่อยู่ในไดเร็กทอรีชื่อ "Devices" ในโฟลเดอร์ซอร์สโปรเจ็กต์ของคุณ



1

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


1

ฉันแก้ไขปัญหานี้โดยการลบแอตทริบิวต์ "ยกเว้น" สำหรับแพ็กเกจนั้นใน.classpathไฟล์ของฉัน ลบแอตทริบิวต์ไม่ใช่ทั้งแท็กมิฉะนั้น "src / java" จะหยุดเป็นโฟลเดอร์ต้นทาง

<classpathentry excluding="com/myproject/mypackage/mysubpackage/" kind="src" path="src/java"/>

1

ปัญหานี้ได้รับการแก้ไขโดยการระบุชื่อแพ็กเกจ

ฉันย้ายไฟล์Test_Steps.javaซึ่งอยู่ภายใต้ package stepDefinition

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

เพียงเพิ่มแพ็คเกจ stepDefinitionที่ปัญหาได้รับการแก้ไข

ดังนั้นปัญหานี้อาจเกิดขึ้นได้เมื่อคุณมีแพ็กเกจและคุณไม่ได้ใช้ในไฟล์คลาสของคุณ

การเพิ่มเข้าไปช่วยแก้ปัญหาและข้อผิดพลาดไม่ปรากฏอีกต่อไป

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


0

ตรวจสอบให้แน่ใจว่าคุณได้สร้างแพ็คเกจที่ถูกต้องคุณอาจมีโอกาสสร้างโฟลเดอร์แทนที่จะเป็นแพ็คเกจ


0
  1. สร้างไดเร็กทอรี [your.project.name] ในเวิร์กสเปซรูทไดเร็กทอรีของโปรเจ็กต์ของคุณ

  2. คัดลอก * .java จาก "src" ไปยังไดเร็กทอรีนั้น

  3. ปิดและเปิดโครงการอีกครั้ง


0

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันตรวจสอบโปรเจ็กต์จากที่เก็บ svn ใน eclipse มีไฟล์ jar ในโฟลเดอร์. m2 ของฉันที่ eclipse ไม่ได้ดู เพื่อแก้ไขปัญหาที่ฉันทำ:

คลิกขวาที่โฟลเดอร์โครงการกำหนดค่า> แปลงเป็นโครงการ Maven

และนั่นช่วยแก้ปัญหาได้


0

มีคำตอบเป็นล้านคำตอบ แต่นี่เป็นอีกคำตอบหนึ่ง: คัดลอกไฟล์ลงในแพ็กเกจใหม่ลบแพ็กเกจเก่าและเปลี่ยนชื่อแพ็กเกจใหม่เป็นชื่อแพ็กเกจเก่า


0

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


0

ฉันมีสถานการณ์แบบนี้เมื่อฉันคัดลอกคลาสจากแพ็คเกจ / โปรเจ็กต์อื่น ๆ

Menu-> Project-> Clean มักจะช่วยได้


0

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


0

ฉันประสบปัญหานี้เช่นกันเมื่อฉันนำเข้าโครงการที่มีอยู่เพื่อคราส มันเป็นโปรเจ็กต์ gradle แต่ในขณะที่อิมพอร์ตฉันอิมพอร์ตเป็นโปรเจ็กต์ปกติโดยคลิกทั่วไป -> โปรเจ็กต์ที่มีอยู่ลงในเวิร์กสเปซ เพื่อแก้ไขปัญหาฉันได้เพิ่ม Gradle nature ให้กับโปรเจ็กต์โดย :::: คลิกขวาที่โฟลเดอร์ Project -> Configure-> Add Gradle Nature


0

ฉันใช้ Spring Tool Suite 4 ไม่สามารถเข้าใจปัญหาได้ โครงสร้างไดเร็กทอรีเป็นไปตามชื่อแพ็กเกจ

แต่การทำความสะอาดโครงการช่วยฉันได้


0

ฉันมีปัญหาเดียวกันกับโครงการ maven ใน Eclipse IDE ฉันสามารถแก้ไขได้โดยการแทนที่ไฟล์. classpath ด้วยรูปแบบที่ถูกต้อง หลังจากเปลี่ยนปิดและเปิดโครงการ

ตัวอย่างไฟล์. classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/webapp">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="test" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

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