선언 된 패키지가 예상 패키지 ""와 일치하지 않습니다.


89

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디렉토리에 있습니까?
제레미

7
질문을 소급하여 변경하려면 (솔직히 말해서 무의미 해 보임) 일관성을 유지해야합니다. 질문의 첫 단락을 편집하지 않았습니다. 또한 모든 댓글이 이상하게 보이도록 만들었습니다. 거의 1 년 반 후에 모든 것을 바꾸는 이유는 무엇입니까?
Jon Skeet 2013 년

답변:


52

Eclipse는 선언 된 패키지가 디렉토리 계층 구조와 일치 할 것으로 예상하므로 Java 파일이 소스 루트 아래의 "Devices"라는 디렉토리에있을 것으로 예상합니다. 현재 파일이 소스 루트에 직접있는 것처럼 보입니다. 따라서 적절한 디렉토리를 만들고 거기로 파일을 이동하십시오.

일반적으로 패키지는 소문자이며 DNS 역순으로 조직 이름을 포함합니다.

com.foo.devices;

3
@Sakti : 내가 아는 한 당신은 할 수 없으며, 할 수 있다고하더라도 그렇게하지 말라고 강력히 권하고 싶습니다. 숙련 된 모든 Java 개발자는 일반적인 규칙을 따르기를 기대합니다.
Jon Skeet

88

파일을 닫았다가 다시 열어보십시오.

파일 위치 또는 패키지 선언에 전혀 문제가없는 경우 이클립스에서이 오류가 발생할 수 있습니다. 이러한 다른 솔루션을 시도하는 데 많은 시간을 보내기 전에 시도해보십시오. 때때로 일식은 혼란스러워집니다. 여러 번 저에게 효과적이었습니다. 나는 이 아이디어Joshua Goldberg 에게 돌렸다 .


2
VS Code 내부의 Gradle 프로젝트 에서이 문제가 발생했습니다. 다시 열어 수정했습니다.
TastyWheat

1
Eclipse 편집기에서 파일을 열고 닫는 것이 문제 해결에 도움이되었습니다. Java config build-source 탭에 소스 폴더를 추가했지만 오류가 제거되지 않았지만 Eclipse에서 편집기를 닫고 열었을 때 도움이되었습니다. :-)
JassJava

이클립스를 종료하고 다시 시작하면 문제도 해결되었습니다.
Don Smith

그는 .. 나는 그것을 고치려고 한 시간을 보냈고 이것을 보았다.
Vikash

44

솔루션 1 : 이클립스 CVS에서 체크 아웃 한 프로젝트에 대해 " 선언 된 패키지가 예상 패키지와 일치하지 않습니다 " 라는 오류가 발생했을 때 저에게 도움이 된 한 가지 솔루션이 있습니다 .

탐색 모음에서 프로젝트를 클릭하고 '삭제'를 클릭 1.Right
을 2.Make 확인 ' 디스크 삭제 프로젝트 내용을 옵션은' NOT 확인하고 확인을 클릭합니다.
3. 이제 프로젝트가 삭제 된 후 File->
Import- > General- > Existing Projects into Workspace 4. 디렉토리 목록에서 작업 공간을 선택하고 프로젝트 이름 옆에있는 확인란을 선택합니다. ' 마침 '을 클릭하십시오.

해결 방법 2 : 다시 한 번 다음 메시지와 함께이 오류가 발생했습니다.

Eclipse 빌드 오류-java.lang.Object를 해결할 수 없습니다. 여기에 다른 경로 언급을 따라야했는데 오류가 사라졌습니다.

그 동안 해결 방법은 프로젝트에서 JRE 시스템 라이브러리를 제거한 다음 다시 추가하는 것입니다. 단계는 다음과 같습니다.

  1. 빌드 오류가있는 프로젝트의 속성으로 이동합니다 (오른쪽 클릭> 속성) "빌드 경로"섹션에서 "라이브러리"탭을 봅니다. 목록에서 "JRE 시스템 라이브러리"를 찾습니다 (누락 된 경우이 오류 메시지는 이클립스 버그이지만 잘못 구성된 프로젝트)
  2. "JRE 시스템 라이브러리"제거
  3. "Add Library ..."를 누르고 "JRE System Library"를 선택하고 프로젝트에 적합한 JRE를 추가합니다 (예 : 'Workspace default JRE').
  4. 라이브러리 선택에서 "마침"을 누르고 프로젝트 속성에서 "확인"을 누른 다음 프로젝트가 다시 빌드 될 때까지 기다립니다.

오류가 해결되기를 바랍니다.


나도이 작업을 수행해야했다 (그루비 테스트 디렉토리를 빌드에 추가). 다시 생성해야하는 실행 구성에 대한 메모를 작성하는 것을 잊지 마십시오. 이것이 왜 필요한지 아십니까? 그런 고통.
Joshua Goldberg

11
더 간단한 솔루션 : 나는 다시이 상황에 있었고 프로젝트를 닫고 Eclipse를 다시 시작한 다음 프로젝트를 다시 열어 작동시킬 수있었습니다.
Joshua Goldberg

12
더 간단합니다! 방금 다시 가져 왔는데 문제가있는 단일 파일의 편집기를 닫았다가 다시 열면 사라졌습니다.
Joshua Goldberg

4
이클립스를 다시 시작하면 문제가 해결되는 것 같습니다.
Mike R

솔루션 1이 저에게 효과적이었습니다. 엄청 이상해. 동일한 git 클론을 다른 컴퓨터의 Eclipse로 가져 왔지만이 문제를 보지 못했습니다.
dnuttle 2014

13

다음 단계에 따라 문제를 해결했습니다.

  1. 프로젝트 선택-마우스 오른쪽 버튼 클릭-자바 빌드 경로.

  2. 소스 탭에서- srcsrc/main/java.

  3. Eclipse는 모든 프로젝트를 재정렬합니다.


11

이 문제가 발생했습니다. 패키지 내의 다른 클래스는 괜찮 았지만 한 클래스에는 이에 대한 오류가있었습니다. 패키지 선언에는 문제가 없습니다.

나는 그것을 수정 refactor->move하고 클래스를 일시적으로 다른 패키지로 옮긴 다음 refactor->move원래 패키지 로 돌아 왔습니다.



2

"Devices"라는 프로젝트 아래에 새 패키지를 만들고 그 안에 클래스를 배치합니다. 이는 프로젝트 소스 폴더의 "Devices"라는 디렉토리에 배치되는 클래스와 동일합니다.


1

Devices프로젝트 속성에서 소스 폴더로 정의되어 있는지 확인하십시오 .


1

같은 종류의 오류가 발생했지만 내 패키지는 절대적으로 정확했습니다. 편집기를 닫고 열었을 때 오류가 사라집니다. 이것이 일부 시나리오에서 도움이되기를 바랍니다.


1

.classpath파일 에서 해당 패키지의 "제외"속성을 제거하여이 문제를 해결했습니다 . 전체 태그가 아니라 속성을 제거하십시오. 그렇지 않으면 "src / java"가 소스 폴더가되지 않습니다.

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

1

이 문제는 패키지 를 언급하여 해결되었습니다. 이름

stepDefinition 패키지 아래에있는 Test_Steps.java 파일을 이동 했습니다.

여기에 이미지 설명 입력

stepDefinition 패키지를 추가하기 만하면 문제가 해결되었습니다.

따라서이 문제는 패키지가 있고 클래스 파일에서 사용하지 않을 때 발생할 수 있습니다.

추가하면 문제가 해결되었으며 오류가 더 이상 나타나지 않았습니다.

여기에 이미지 설명 입력


0

올바른 패키지를 생성했는지 확인하십시오. 패키지 대신 폴더를 생성 할 수 있습니다.


0
  1. 프로젝트의 작업 공간 루트 디렉토리에 [your.project.name] 디렉토리를 만듭니다.

  2. * .java를 "src"에서 해당 디렉토리로 복사하십시오.

  3. 프로젝트를 닫았다가 다시 엽니 다.


0

이클립스의 svn 저장소에서 프로젝트를 체크 아웃 할 때 이런 일이 발생했습니다. eclipse가 보지 않은 .m2 폴더에 jar 파일이 있습니다. 내가 한 문제를 해결하기 위해 :

프로젝트 폴더 구성> Maven 프로젝트로 변환을 마우스 오른쪽 단추로 클릭하십시오.

그리고 그것은 문제를 해결했습니다.


0

백만 개의 답변이 있지만 여기에 또 다른 답변이 있습니다. 파일을 새 패키지에 복사하고, 이전 패키지를 삭제하고, 새 패키지의 이름을 이전 패키지 이름으로 바꿉니다.


0

기본 패키지를 사용하고 있지 않은지 확인하십시오. 이름이 'devices'인 새 패키지를 만들고이 코드를 내부에 복사하여 사용합니다.


0

다른 패키지 / 프로젝트에서 클래스를 복사 할 때 이런 상황이 발생했습니다.

Menu-> Project-> Clean은 일반적으로 도움이됩니다.


0

제 경우에는 문제 탭에서 오류 마커를 선택하고 Java의 파일 기본 메소드가 올바르게 실행되었으므로 삭제했습니다. 이것은 Eclipse Neon에 설치된 수많은 플러그인으로 인한 결함입니다.


0

이클립스에 기존 프로젝트를 가져올 때도이 문제에 직면했습니다. gradle 프로젝트 였지만 가져 오는 동안 General-> Existing Projects into Workspace를 클릭하여 일반 프로젝트로 가져 왔습니다. 문제를 해결하기 위해 :::: 프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭-> 구성-> Gradle Nature 추가를 프로젝트에 추가했습니다.


0

Spring Tool Suite 4를 사용하고있었습니다. 문제를 파악할 수 없습니다. 디렉토리 구조는 패키지 이름을 따릅니다.

그러나 프로젝트를 청소하는 것이 도움이되었습니다.


0

Eclipse IDE의 maven 프로젝트에서 동일한 문제가 발생했습니다. .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.