Gói đã khai báo không khớp với gói mong đợi “”


89

Tôi đang sử dụng Eclipse và đôi khi không sử dụng Java. Tuy nhiên, tôi có thể biên dịch mã của mình trên dòng lệnh tốt và tạo các .classtệp cần thiết . Trong Eclipse, nó phàn nàn điều đó The declared package "Devices" does not match the expected package "". Điều này có nghĩa là gì và tôi có thể sửa chữa nó như thế nào?

Mã mẫu:

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;
    }
}

Tên dự án của tôi là DeviceDDS.


2
Lớp này có trong /src/Convertersthư mục không?
Jeremy

6
Nếu bạn định thay đổi lại câu hỏi của mình (điều này có vẻ vô nghĩa, thành thật mà nói), bạn cần phải nhất quán về nó - bạn chưa chỉnh sửa đoạn đầu tiên của câu hỏi. Bạn cũng đã làm cho tất cả các nhận xét trông kỳ quặc. Tại sao lại thay đổi mọi thứ, gần một năm rưỡi sau?
Jon Skeet

Câu trả lời:


52

Eclipse mong đợi gói được khai báo sẽ khớp với hệ thống phân cấp thư mục - vì vậy nó mong đợi tệp Java của bạn nằm trong thư mục có tên "Thiết bị" dưới thư mục gốc của bạn. Hiện tại, có vẻ như tệp nằm trực tiếp trong thư mục gốc của bạn. Vì vậy, hãy tạo thư mục thích hợp và di chuyển tệp vào đó.

Lưu ý rằng thông thường, các gói được viết thường và bao gồm tên tổ chức của bạn theo thứ tự DNS ngược, ví dụ:

com.foo.devices;

3
@Sakti: Theo như tôi biết thì bạn không thể làm được, và tôi thực sự khuyên bạn không nên làm như vậy ngay cả khi bạn có thể. Tất cả các nhà phát triển Java có kinh nghiệm sẽ mong đợi bạn tuân theo các quy ước thông thường.
Jon Skeet

88

Thử đóng và mở lại tệp.

Có thể gặp lỗi này trong eclipse khi hoàn toàn không có gì sai với vị trí tệp hoặc khai báo gói. Hãy thử điều đó trước khi dành nhiều thời gian để thử các giải pháp khác. Đôi khi nhật thực chỉ bị nhầm lẫn. Nó có hiệu quả với tôi trong một số trường hợp. Tôi ghi công ý tưởng đó cho Joshua Goldberg .


2
Gặp sự cố này với một dự án Gradle bên trong VS Code. Mở lại đã sửa nó.
TastyWheat

1
mở và đóng tệp trong trình chỉnh sửa nhật thực đã giúp giải quyết vấn đề. Tôi đã thêm một thư mục nguồn trong tab xây dựng cấu hình java - tab nguồn, lỗi không được xóa, nhưng khi tôi đóng và mở trình chỉnh sửa trong eclipse, nó đã giúp được. :-)
JassJava

Việc thoát và khởi động lại nhật thực cũng đã khắc phục được sự cố.
Don Smith

he he .. Mình đã mất cả tiếng đồng hồ để sửa nó và sau đó thấy được điều này.
Vikash

44

Giải pháp 1: Một giải pháp phù hợp với tôi khi lỗi này " Gói được khai báo không khớp với gói mong đợi " xảy ra cho một dự án tôi đã đăng xuất từ ​​CVS eclipse:

1. Nhấp chuột phải vào dự án trong thanh điều hướng và nhấp vào 'xóa' 2.
Đảm bảo rằng tùy chọn ' Xóa nội dung dự án trên đĩa ' KHÔNG được chọn và nhấp vào OK.
3.Bây giờ sau khi dự án bị xóa, hãy chuyển đến Tệp -> Nhập -> Chung -> Dự án hiện có vào Không
gian làm việc 4. Chọn không gian làm việc của bạn từ danh sách thư mục và chọn hộp bên cạnh tên dự án của bạn. Nhấp vào ' Kết thúc '

Giải pháp 2: Một lần nữa tôi gặp lỗi này với thông báo sau

Lỗi xây dựng Eclipse - java.lang.Object không thể được giải quyết Tôi phải làm theo một tuyến đường khác được đề cập ở đây và lỗi đã biến mất.

Trong thời gian này, công việc xung quanh là xóa Thư viện Hệ thống JRE khỏi dự án và sau đó thêm lại nó. Đây là các bước:

  1. Chuyển đến thuộc tính của dự án có lỗi bản dựng (nhấp chuột phải> Thuộc tính) Xem tab "Thư viện" trong phần "Đường dẫn xây dựng" Tìm "Thư viện hệ thống JRE" trong danh sách (nếu thiếu cái này thì thông báo lỗi này không phải là lỗi nhật thực nhưng một dự án được định cấu hình sai)
  2. Xóa "Thư viện hệ thống JRE"
  3. Nhấn "Thêm thư viện ...", chọn "Thư viện hệ thống JRE" và thêm JRE thích hợp cho dự án (ví dụ: 'JRE mặc định của vùng làm việc')
  4. Nhấn "Kết thúc" trong lựa chọn thư viện và "OK" trong các thuộc tính của dự án và sau đó chờ xây dựng lại dự án

Hy vọng rằng lỗi sẽ được giải quyết ...


Tôi cũng phải làm điều này (thêm một thư mục các bài kiểm tra thú vị vào bản dựng). Đừng quên ghi chú về cấu hình chạy của bạn, những cấu hình này bạn sẽ cần tạo lại. Bất kỳ ý tưởng tại sao điều này là cần thiết? Một nỗi đau.
Joshua Goldberg

11
Giải pháp đơn giản hơn: Tôi lại gặp phải tình huống này và có thể làm cho nó hoạt động bằng cách đóng dự án, khởi động lại Eclipse và mở lại dự án.
Joshua Goldberg

12
Đơn giản hơn nữa! Tôi vừa gặp lại nó, và nó đã biến mất bằng cách đóng và mở lại trình chỉnh sửa của tệp có vấn đề.
Joshua Goldberg

4
Khởi động lại nhật thực dường như để sửa chữa nó.
Mike R

Giải pháp 1 đã làm việc cho tôi. Rất kì lạ. Tôi đã nhập cùng một bản sao git vào Eclipse trên các máy khác và không gặp sự cố này.
dnuttle

13

Tôi đã giải quyết sự cố bằng cách làm theo các bước sau:

  1. Chọn dự án - Nhấp chuột phải - đường dẫn xây dựng java.

  2. Trong tab nguồn - bạn thay đổi srcthành src/main/java.

  3. Eclipse sẽ sắp xếp lại tất cả dự án.


11

Tôi gặp sự cố này - các lớp khác trong gói của tôi vẫn ổn, nhưng một lớp có lỗi đối với nó. Không có gì sai với khai báo gói.

Tôi đã sửa nó bằng cách thực hiện refactor->movevà chuyển lớp sang gói khác tạm thời, sau đó refactor->movequay lại gói ban đầu.


2

Bạn cần có lớp bên trong một thư mục Devices.


2

Tạo một gói mới trong dự án của bạn có tên "Thiết bị" và đặt lớp của bạn vào đó. Điều này tương đương với việc lớp được đặt trong một thư mục có tên "Thiết bị" trong thư mục nguồn dự án của bạn.


1

Đảm bảo rằng nó Devicesđược xác định là một thư mục nguồn trong thuộc tính dự án.


1

Có cùng một loại lỗi nhưng gói của tôi hoàn toàn chính xác. Khi tôi vừa đóng và mở trình chỉnh sửa của mình, lỗi sẽ biến mất. Hy vọng điều này có thể giúp ích trong một số trường hợp.


1

Tôi đã sửa lỗi này bằng cách xóa thuộc tính "loại trừ" cho gói đó trong .classpathtệp của mình . Loại bỏ thuộc tính, không phải toàn bộ thẻ hoặc "src / java" sẽ không còn là một thư mục nguồn.

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

1

Sự cố này đã được giải quyết bằng cách đề cập đến tên gói

Tôi đã di chuyển tệp Test_Steps.java của mình trong gói stepDefinition

nhập mô tả hình ảnh ở đây

chỉ bằng cách thêm gói bước Định nghĩa vấn đề đã được giải quyết

Vì vậy, sự cố này có thể xảy ra khi bạn có một gói và bạn không sử dụng trong tệp lớp của mình.

Thêm nó vào đã giải quyết được sự cố và lỗi không còn xuất hiện nữa.

nhập mô tả hình ảnh ở đây


0

Đảm bảo rằng Bạn đã tạo đúng gói. Bạn có thể có cơ hội tạo thư mục thay vì gói


0
  1. Tạo thư mục [your.project.name] trong thư mục gốc không gian làm việc của dự án của bạn.

  2. Sao chép * .java từ "src" vào thư mục đó.

  3. Đóng và mở lại dự án.


0

Điều này đã xảy ra với tôi khi tôi đang kiểm tra một dự án từ kho lưu trữ svn trong eclipse. Có các tệp jar trong thư mục .m2 của tôi mà nhật thực không xem xét. Để khắc phục sự cố, tôi đã làm:

nhấp chuột phải vào thư mục dự án Định cấu hình> Chuyển đổi sang Dự án Maven

và điều đó đã giải quyết được vấn đề.


0

Có một triệu câu trả lời, nhưng đây là một câu trả lời khác: sao chép các tệp vào một gói mới, xóa gói cũ và đổi tên gói mới thành tên gói cũ.


0

Đảm bảo rằng bạn không sử dụng gói mặc định. Tạo một gói mới với tên 'thiết bị' và sao chép mã này vào bên trong nó và sử dụng.


0

Tôi đã gặp phải tình huống sắp xếp này khi tôi sao chép các lớp từ các gói / dự án khác.

Menu-> Project-> Clean thường hữu ích.


0

Trong trường hợp của tôi, tôi đã chọn điểm đánh dấu lỗi trong tab Vấn đề và xóa nó vì phương thức tệp chính của Java đang được thực thi chính xác. Đó là một số trục trặc trong Eclipse Neon với vô số plugin mà nó đã cài đặt.


0

Tôi cũng gặp phải vấn đề này khi nhập một dự án hiện có vào eclipse. Đó là một dự án gradle, nhưng trong khi nhập, tôi đã nhập nó như một dự án thông thường bằng cách nhấp vào Chung-> Dự án hiện có vào Workspace. Để giải quyết vấn đề, tôi đã thêm bản chất Gradle vào dự án bằng cách :::: Nhấp chuột phải vào thư mục Dự án -> Cấu hình-> Thêm bản chất Gradle


0

Tôi đang sử dụng Spring Tool Suite 4. Không thể tìm ra sự cố. Cấu trúc thư mục theo tên gói.

Nhưng làm sạch dự án đã giúp tôi.


0

Tôi đã gặp vấn đề tương tự với một dự án maven trong IDE Eclipse. Tôi đã có thể giải quyết vấn đề này bằng cách thay thế tệp .classpath bằng định dạng chính xác. Sau khi thay thế đóng và mở dự án.

Tệp .classpath mẫu

<?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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.