Eclipse 오류 : 필수 .class 파일에서 간접적으로 참조 되었습니까?


185

Eclipse에서 오류가 발생했습니다. 이 오류 메시지의 의미는 다음과 같습니다.

iglu.ir.TermVector 유형을 확인할 수 없습니다. 필수 .class 파일에서 간접적으로 참조됩니다.


21
프로젝트의 소스 경로에 iglu.ir.TermVector를 포함하는 jar를 추가하십시오.
Harry Joy

2
수업이 확실하다면 모든 프로젝트를 깨끗이 정리하고 새로 고침
Mirco

이것은 내 항아리에 전이 의존성 때문에 나에게 일어났다
Janac Meena

바로 그거죠! 이 jar은 pom.xml 종속성에 있어야합니다.
gaurav

답변:


193

"사용하는 클래스에는 클래스 경로에없는 다른 클래스가 필요합니다." 필요한 항아리를 클래스 경로에 추가해야합니다 (Harry Joy가 제안한대로).


3
다른 경우에 나를 많이 도와주는 보편적이고 간단한 대답 :) THX
Mariusz Chw

특히 클래스를 제거하려고 할 때 빠진 유형에 대한 부모 클래스를 확인하십시오. 이것이 항상이 메시지가 의미하는 것이 아니라면 아마도 대부분의 시간이 의미하는 것입니다.
butallmj

예, 참조 된 항아리에 항아리가 누락되어 있음을 발견했습니다. :) 감사합니다.
Ali Imran

21
@Arne, 왜 그때 간접적으로 참조 한다고 말 합니까? 그것이 전혀 언급 되지 않았다고 말해서는 안됩니까?
Pacerier

2
@Pacerier는 사실이 아닙니다. 이 유형을 직접 참조하는 것은 코드가 아니라 코드가 사용하는 코드이므로 코드에서 해당 유형으로의 종속성은 "단순"전 이적입니다. "간접적으로"는 어디를 볼지를 알려줍니다.
hiergiltdiestfu

22

이것은 실제 오류이므로 Eclipse가 혼란 스러울 수 있습니다. 나는 오류를 무시하고 endpointInterface가 불평하는 웹 서비스를 실행했으며 대화를 실행할 때마다 대화 상자를 처리 해야하는 것을 제외하고는 정상적으로 실행되었습니다. 나에게 아무것도 알려주지 않는 또 다른 불투명 한 오류.


또한 항아리에 없습니다. 그것은 포함 된 모든 프로젝트에 포함 된 프로젝트 중 하나에 있습니다.
Jerry Miller

3
나는 일식 에서이 문제를 겪었지만 maven을 통해 빌드하는 것이 잘 작동했습니다. 수정 사항은 필수 클래스가 포함 된 Eclipse 작업 공간에서 프로젝트를 삭제하고 다시 가져 오는 것입니다.
PiersyP

이것은 때때로 발생할 수 있지만 동일한 응답을 제공하는 오류가 발생하여 프로젝트를 빌드 할 수 없습니다.
Christopher Connery

13

때때로 나는 항상 "mvn eclipse : clean"명령으로 오래된 속성을 지우고 mvn eclipse : eclipse -Dwtpversion = 2.0 (웹 프로젝트의 경우)을 실행하도록 수정했습니다. 구식 속성이 저장되어 있기 때문에 이클립스가 때때로 혼란 스러울 수 있습니다.


프로젝트를 청소하고 (Project-> Clean ...에서) 작동했습니다.
Anu Shibin Joseph Raj

mvn eclipse:clean그리고 / 또는 mvn eclipse:eclipse은 그것이 작동하게하는 마술로 보입니다.
앙투안 마틴

13

때문에이 오류가 발생했습니다 로컬 maven 저장소 손상되어이 .

따라서 문제를 해결하려면 내 저장소로 가서 관련 .jar가있는 폴더를 삭제 한 다음 update mavenEclipse에서 강제로 실행해야 했습니다.


1
이것은 나를 위해 일했지만, 무엇보다도 효과가 없었습니다. 팀원 중 한 명이 저장소에서 저장소의 버전을 업데이트 할 때 문제가 발생했습니다.
IAL

8

이것은 3.0에서 해결 된 알려진 문제 (버그 67414) 인 것처럼 들립니다 ... 누군가가 3.4에서도 발생한다고 언급했습니다.

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

Here are the steps:

빌드 오류가있는 프로젝트의 속성으로 이동하십시오 (마우스 오른쪽 버튼 클릭> 속성)

"빌드 경로"섹션의 "라이브러리"탭보기

목록에서 "JRE 시스템 라이브러리"를 찾으십시오 (없는 경우이 오류 메시지는 일식 버그가 아니라 잘못 구성된 프로젝트입니다)

"JRE 시스템 라이브러리"를 제거하십시오.

"라이브러리 추가 ..."를 누르고 "JRE 시스템 라이브러리"를 선택하고 프로젝트에 적절한 JRE를 추가하십시오 (예 : '작업 공간 기본 JRE')

라이브러리 선택에서 "완료"를 누르고 프로젝트 속성에서 "확인"을 누른 다음 프로젝트가 다시 빌드 될 때까지 기다리십시오.

잘하면 오류가 해결 될 것입니다 ...


예. spring-web-3.0.1.RELEASE.와 동일한 문제가 있었지만 pom.xml에 종속성으로 등록되었지만 http.csrf ()를 만들 때 이미 일부 참조에서 종속성으로 작동했습니다. disable (). cors (). disable (). httpBasic (). and (). authorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). authenticated (); 그런 다음 jar 파일을 다운로드하여 전통적인 수동 방식으로 가져옵니다.
Tsakiroglou Fotis 2012 년

5

jar 파일의 클래스가 jar의 폴더 구조와 동일한 구조를 따르지 않을 때이 오류가 발생합니다.

예를 들어 클래스 파일에 com.test.exam 패키지가 있고이 클래스 파일에서 작성된 classes.jar의 구조는 test.exam입니다 ... 오류가 발생합니다. classes.jar의 패키지 구조를 수정 한 다음 ecplipse 빌드 경로에 포함시켜야합니다.


4

이클립스가 다른 버전의 jdk에서 작동하고 있기 때문에이 예외가 발생했습니다. 정확하고 깨끗하며 빌드되고 작동했습니다!


3

Eclipse 4.4.2 에서이 문제에 대한 흥미로운 사례가있었습니다. 내 프로젝트 (P1)는 이름은 같지만 인수 유형이 다른 두 가지 메소드가있는 외부 클래스 (프로젝트 P2)를 참조했습니다.

public static void setItem(Integer id) …
public static void setItem(Item item) …

이 유형 Item은 세 번째 프로젝트 P3에 포함되어 있으며 여기에서 표시하고 싶지 않습니다. P1은 첫 번째 방법 만 호출했습니다.

ExternalClass.setItem(Integer.valueOf(12345));

두 번째 방법은 Item 클래스 은 사용되지 않았으며 P3이 컴파일 클래스 경로에 없었던 것이 사실입니다. 왜 사용하지 않으면 사용해야합니까?

아직도 이클립스는 나에게 말했다

The type ...Item cannot be resolved.
It is indirectly referenced from required .class files

명령 줄에서 컴파일해도 이러한 문제는 발생하지 않았습니다. 두 번째 방법의 이름을 변경하면 (여기서는 사용하지 않습니다!) 이클립스에서도 문제가 해결되었습니다.


2
Eclipse Photon Release (4.8.0)와 동일한 문제가 발생했습니다.
Delphin


2

여전히 설정에 문제가 없으면 프로젝트-> 정리 및 작업 공간의 모든 프로젝트를 청소하십시오.

편집 : 죄송합니다, verbose_mode의 제안을 보지 못했습니다 ... 같은 것


2

나를 위해, 오래된 항아리 세트를 오랫동안 사용하여 jdk를 1.8.0_60으로 업그레이드하면 발생합니다. jdk1.7.0_25로 돌아 가면 이러한 모든 문제가 사라집니다. JRE와 라이브러리 간의 호환성에 문제가있는 것 같습니다.


1

코드에서 아무것도 아닌 일부 svn 설정을 변경하면 오류가 발생했습니다. 프로젝트를 정리하면 오류가 해결되었습니다.


1

내 경우, 나는 프로젝트를 생성하고 만들어 minSdkVersion=9targetSdkVersion=17. 자동 생성을 사용했습니다 libs/android-support-v4.jar. 또한 사용했습니다 ActionBarActivity사용하여 android-support-v7-appcomapt.jar. 그래서 방금 폴더 에서 android-support-v7-appcompat.jar파일을 복사하여 android-sdk/extras/andrid/support/v7/appcompat/libs프로젝트 libs폴더에 붙여 넣었습니다 . 그리고 이것은 위의 오류를 일으켰습니다. 그래서 기본적으로 android-support-v4.jar파일을 android-sdk/extras/andrid/support/v7/appcompat/libs프로젝트 libs폴더 에 넣어야했습니다 . 내 지식에 따라 v7.jar파일은 파일에 종속되었습니다 v4.jar. 그래서 v4.jar내 프로젝트 대신 자동으로 생성 된 v4.jar파일 인 자체 파일 이 필요했습니다 .


1

빠르고 간단하게이 방법으로 수정했습니다 (Windows XP Home Edition에서 ADT 버전 : v21.0.0-531062 사용).

  1. 매니페스트 파일을 열었습니다.
  2. 기존 프로젝트 minSdkVersion을 maxSdkVersion과 동일한 값으로 변경했습니다.
  3. 매니페스트 파일을 저장하십시오.
  4. 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트 빌드를 선택하십시오.
  5. 상단 메뉴에서 : Project-Clean ..-확인 아래에서 관련 프로젝트 만 확인을 선택하십시오. 즉시 빌드 시작 및 선택한 프로젝트 만 빌드하고 확인을 클릭하십시오.
  6. 자바 파일 열기-더 이상 빨간색 오류가 없습니다!
  7. 위의 1 단계로 돌아가서 Back minSdkVersion을 원래 값으로 변경합니다 (가능한 한 많은 Android 버전을 지원합니다).

그러나 문제는 며칠마다 반환됩니다. 나는 위와 똑같이하고 해결하고 발전시킬 수 있습니다.


0

클래스 파일이 누락되었다는 이미 제안 된 원인 외에도이 오류는 중복 클래스 파일을 나타낼 수 있습니다. 이클립스는 빌드 경로의 클래스 파일이 빌드 경로에 여러 정의가있는 다른 클래스를 사용할 때이 오류를보고합니다.


0

당신이 우리에게 아주 작은 세부 사항을 제공하기 때문에, 당신이 한 일, 아마도 매우 쉬운 실수는 아마도

Build Path > Configure Build Path > Projects

거기에서 추가 프로젝트 폴더를 추가하는 대신

Build Path > Configure Build Path > Libraries

대신 거기에서 프로젝트 폴더를 추가했습니다.

코드가 모두 정확하지만 자동으로 가져 오기를 재구성하면 ctrl+space com.your.additionalproject를 참조하는 import 문 대신 바로 가기 참조가 모두 bin.com.your.additionalproject를 가리키는 .

빈에 유의하십시오. 다른 프로젝트 폴더 구조를 라이브러리로 취급하여 클래스를 간접적으로 참조한다는 것은 IDE가 참조하는 정확히 이진 클래스를 찾는 모든 작업을 수행함을 의미합니다.

이 문제를 해결하려면 라이브러리에서 폴더를 제거하고 대신 프로젝트 탭에서 폴더를 추가하고 가져 오기를 재구성하십시오. 프로젝트가 잘 작동합니다.


0

새 일식 버전을 사용하고 이전 일식 버전과 함께 사용했던 이전 작업 공간을 사용하려고하면이 오류가 발생합니다.

다음은 문제를 해결하는 방법입니다.

패키지 탐색기-> 특성-> Java 빌드 경로-> 라이브러리->에서 프로젝트를 마우스 오른쪽 단추로 클릭하십시오 .JRE 시스템 라이브러리에 오류 (십자가 표시)가 표시됩니다. 경로를 찾을 수 없기 때문입니다. -> JRE 시스템 라이브러리를 두 번 클릭하십시오.-> "작업 공간 기본 JRE"옵션-> 완료-> 확인을 선택하십시오. -> BUM IT가 작동하고 있습니다.

참고로


0

제 경우에는 pom.xml파일에 새로운 종속성을 추가 한 결과였습니다 .

새로운 종속성은 이전 버전의 라이브러리 (2.5)에 의존했습니다. 같은 라이브러리가 내 다른 라이브러리에 필요했습니다.pom.xml 했지만 버전 3.0이 필요했습니다.

어떤 이유로 Maven에서 이러한 충돌이 발생하면 최신 버전 만 생략됩니다. Eclipse에서 볼 때 pom.xml맨 아래의 "종속성 계층 구조"탭을 선택하여 종속성이 어떻게 해결되는지 확인할 수 있습니다. 이러한 이유로 해당 라이브러리 (및 클래스)가 생략되었는지 확인할 수 있습니다.

필자의 경우 최신 버전을 잠그는 것만 큼 간단했습니다. 항목을 마우스 오른쪽 버튼으로 클릭하면 상황에 맞는 메뉴에서 항목을 잠글 수있는 옵션이 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.