Eclipse hatası: gerekli .class dosyalarından dolaylı olarak başvuruluyor mu?


186

Eclipse'de bir hata aldım. Bu hata mesajı ne anlama geliyor:

İglu.ir.TermVector türü çözümlenemiyor. Gerekli .class dosyalarından dolaylı olarak başvurulur


21
Projenizin kaynak yoluna iglu.ir.TermVector içeren kavanoz ekleyin.
Harry Joy

2
Sınıfın sağlandığından eminseniz, tüm projelerinizi temizleyip yenileyin
Mirco

Bu bana kavanozlarımdaki geçiş bağımlılıkları yüzünden oldu
Janac Meena

kesinlikle! bu kavanozun pom.xml bağımlılıklarında bulunması gerekir.
gaurav

Yanıtlar:


193

Bunun anlamı: "Kullandığınız bir sınıfın sınıf yolunda olmayan başka bir sınıfa ihtiyacı var." (Harry Joy'un önerdiği gibi) gerekli kavanozu sınıfyoluna eklediğinizden emin olmalısınız.


3
Bana farklı durumda çok yardımcı evrensel ve basit bir cevap :) THX
Mariusz Chw

Özellikle sınıfları kaldırmaya çalışırken, eksik türe başvurmak için üst sınıfları kontrol edin. Bu mesajın anlamı her zaman böyle değilse, muhtemelen çoğu zaman bunun anlamıdır.
butallmj

Evet ben referans kavanozlara bazı eksik kavanozlar nedeniyle bulundu :) Teşekkürler.
Ali İmran

21
@Arne, Neden dolaylı olarak atıfta bulunuyor diyor ? Hiç referans alınmadığını söylemeliydim mi?
Pacerier

2
@Pacerier bu doğru olmaz. Doğrudan bu türe atıfta bulunan kodunuz değil, kodunuzun kullandığı bir şeydir, bu nedenle kodunuzdan bu türe bağımlılık "yalnızca" geçişlidir, ancak oradadır. "Dolaylı" nereye bakacağınızı söyler.
hiergiltdiestfu

22

Bu, gerçek bir hata olduğu için Eclipse'nin kafası karışması meselesidir. Hatayı görmezden geldim ve uç noktasıInterface hakkında şikayet ettiği web hizmetini çalıştırdım ve her seferinde çalıştırmak istediğimde iletişim kutusuyla uğraşmak dışında iyi çalıştı. Bana hiçbir şey söylemeyen başka bir opak hatası.


Ayrıca bir kavanozda değil. Herhangi bir ilgisi olan tüm dahil edilen projelere dahil edilen projeksiyonlardan birinde.
Jerry Miller

3
Tutulmada bu sorunu yaşadım, ancak maven ile bina iyi çalıştı. Düzeltme, gerekli sınıfları içeren eclipse çalışma alanındaki projeyi silmek ve yeniden almaktı.
PiersyP

Bu bazen olabilir, ancak aynı yanıtı veren hatalarla karşılaştım ve proje inşa edemez.
Christopher Connery

13

Bazen bana, her zaman eski özellikleri temizlemek için "mvn eclipse: clean" komutuyla düzelttikten sonra mvn eclipse: eclipse -Dwtpversion = 2.0 (elbette web projesi için) çalıştırdım. Bazı eski özellikler vardır, bu nedenle bazen tutulma bazen karıştırılır.


Projeyi temizledim (Project-> Clean ... 'den) ve işe yaradı.
Anu Shibin Joseph Raj

mvn eclipse:cleanve / veya mvn eclipse:eclipseçalışmasını sağlamak için sihir numarası gibi görünüyor.
Antoine Martin

13

Bozuk bir yerel maven deposu nedeniyle bu hatayı aldım .

Bu nedenle, sorunu çözmek için tek yapmam gereken, depomda gidip ilgili .jar'ın bulunduğu klasörü silmek, ardından update mavenEclipse'de zorlamaktı .


1
Bu benim için çalıştı, her şeyden önce işe yaramadı. Sorun, takım arkadaşlarımdan biri pom'dan bir depo sürümünü güncellediğinde ortaya çıktı.
IA

8

Görünüşe göre bu, 3.0'da çözülen bilinen bir sorun (Hata 67414) ... Birisi bunun 3.4'te de meydana geldiğini yorumladı.

Bu arada, geçici çözüm, JRE Sistem Kitaplığı'nı projeden kaldırmak ve yeniden eklemek.

Here are the steps:

Derleme hatası ile projenin özelliklerine gidin (sağ tıklayın> Özellikler)

"Yol Oluştur" bölümündeki "Kütüphaneler" sekmesini görüntüleyin

Listede "JRE Sistem Kütüphanesi" ni bulun (eğer bu eksikse bu hata mesajı bir tutulma hatası değil, yanlış yapılandırılmış bir projedir)

"JRE Sistem Kütüphanesi" ni kaldırın

"Kitaplık Ekle ..." ye basın, "JRE Sistem Kütüphanesi" ni seçin ve proje için uygun JRE'yi ekleyin (örn. 'Çalışma alanı varsayılan JRE')

Kütüphane seçiminde "Bitir" ve proje özelliklerinde "Tamam" a basın ve ardından projenin yeniden oluşturulmasını bekleyin

Umarım hata çözülecektir ...


Evet. Bahar-web-3.0.1 ile aynı problemi yaşadım. devre dışı (). cors (). devre dışı (). httpBasic (). ve (). authorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). Daha sonra jar dosyasını indirdim ve geleneksel manuel yolla içe aktardım.
Tsakiroglou Fotis

5

Bu hata, jar dosyasındaki sınıflar, kavanozun klasör yapısıyla aynı yapıyı izlemediğinde oluşur.

örneğin, sınıf dosyanızda com.test.exam paketi varsa ve bu sınıf dosyasından oluşturulan sınıflar.jar yapısı test.exam ise ... hatası atılır. Sınıflarınızın paket yapısını düzeltmeniz ve sonra ecplipse oluşturma yoluna eklemeniz gerekir ...


4

Tutulma jdk'nin farklı bir sürümünde çalıştığı için bu istisnayı aldım, sadece doğru, temiz ve inşa edip çalıştı!


3

Eclipse 4.4.2 ile ilgili bu sorunun ilginç bir vakası vardı. Projem (P1), aynı ada ancak farklı bağımsız değişken türlerine sahip iki yöntemle harici bir sınıfa (proje P2) başvurdu:

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

Tür Item, burada görünür olmak istemediğim üçüncü bir proje P3'te yer aldı. P1 sadece ilk yöntemi çağırdı:

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

Bu nedenle, Itemsınıfı kullanan ikinci yöntem kullanılmadı ve P3'ün derleme sınıfyolunda olmadığı doğrudur - kullanılmıyorsa neden olmasın.

Hala Eclipse söyledi

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

Komut satırından derleme bu tür sorunlar üretmedi. İkinci yöntemin adını değiştirmek (burada kullanılmayan!) Eclipse'de de sorunu ortadan kaldırdı.


2
Eclipse Photon Release (4.8.0) ile aynı sorunu yaşıyorum
Delphin


2

Kurulumunuzla ilgili hala yanlış bir şey bulamazsanız, Project -> Çalışma alanındaki tüm projeleri temizleyip temizlemeyi deneyebilirsiniz.

EDIT: Üzgünüm, verbose_mode önerisini görmedim ... aynı şey


2

Benim için, jdk'mi eski kavanoz setim uzun süredir kullanıldığında 1.8.0_60'a yükselttiğimde olur. Eğer jdk1.7.0_25'e geri dönersem, bütün bu problemler ortadan kalkar. JRE ve kütüphaneler arasındaki uyumluluk ile ilgili bir sorun gibi görünüyor.


1

Ben sadece bazı svn ayarlarını değiştirmek ve kodunda bir şey değil hatayı aldım. Sadece projelerin temizlenmesi hatayı düzeltti.


1

Benim durumumda, ben bir proje oluşturulur ve onun yapılmış minSdkVersion=9ve targetSdkVersion=17. Otomatik olarak oluşturdum libs/android-support-v4.jar. Ben de faydalanmak zorunda ActionBarActivitykullanarak android-support-v7-appcomapt.jar. Bu yüzden android-support-v7-appcompat.jardosyayı android-sdk/extras/andrid/support/v7/appcompat/libsklasörden kopyaladım ve proje libsklasörüne yapıştırdım . Ve bu yukarıdaki hataya neden oldu. Yani, temelde, benim de proje klasörüme android-support-v4.jardosya koymak gerekiyordu . Bildiğim kadarıyla dosya dosya bağımlılıkları vardı . Yani, projem yerine kendi oluşturduğu dosyaya otomatik olarak ihtiyaç duyuyordu .android-sdk/extras/andrid/support/v7/appcompat/libslibsv7.jarv4.jarv4.jarv4.jar


1

Hızlı ve Basitçe Bu şekilde düzelttim (Windows XP Home Edition'da ADT sürümünü kullanıyorum: v21.0.0-531062)

  1. Manifest dosyası açıldı.
  2. Varolan minSdkVersion projesi maxSdkVersion ile aynı değere değiştirildi (tavsiye: Yeni bir proje oluşturmak ve maxSdkVersion'un ne olduğunu görmek iyi olabilir)
  3. Manifest dosyasını kaydedin.
  4. Projeyi sağ tıklayın ve Proje Oluştur'u seçin.
  5. Üst menüden: Project - Clean .. - işaretleyin Yalnızca ilgili proje, altında Ben işaretledim Hemen bir derleme başlat ve Sadece seçili projeleri derle ve Tamam.
  6. java dosyasını açın - artık kırmızı hata yok!
  7. Yukarıdaki 1. adıma dönün ve minSdkVersion'ı Orijinal değerine geri döndürün (mümkün olduğunca çok Android sürümünü desteklemek için).

Sorun oldu ama sorun her birkaç günde bir geri dönüyor. Yukarıdaki ile aynı şeyi yaparım ve çözer ve geliştirmeme izin verir.


0

Bir sınıf dosyasının eksik olmasının zaten önerilen nedenine ek olarak, bu hata yinelenen bir sınıf dosyasını da gösterebilir, derleme yolundaki bir sınıf dosyası derleme yolunda birden fazla tanım içeren başka bir sınıf kullandığında, eclipse bu hatayı rapor eder.


0

Bize çok az ayrıntı verdiğiniz için, büyük olasılıkla yaptığınız şey, bu inanılmaz kolay bir hata.

Build Path > Configure Build Path > Projects

ve ek proje klasörünüzü oradan eklediğinizde,

Build Path > Configure Build Path > Libraries

ve proje klasörünüzü oradan eklediniz.

Kodunuz doğruysa bu kesinlikle doğrudur, ancak ithalatı otomatik olarak ctrl+space com.your.additionalproject'e atıfta bulunan ithalat beyanlarınız yerine, kısayol ettikten sonra, referanslarınız bin.com.your.additionalproject'e işaret eder.

Kutuyu not edin. Diğer proje klasörü yapınıza bir kütüphane gibi davranarak dolaylı olarak sınıfınıza atıfta bulunarak, IDE'nizin başvurduğunuz tam olarak ikili sınıfı bulmanın tüm wokr'ını yapması anlamına gelir.

Bunu düzeltmek için klasörü Kitaplıklar'dan kaldırın ve bunun yerine Projeler sekmesinin altına ekleyin ve içe aktarma işlemlerinizi yeniden düzenleyin. Projeniz iyi çalışmalıdır.


0

Yeni bir tutulma sürümü kullandığımda ve eski tutulma sürümü ile kullandığım önceki çalışma alanını kullanmaya çalıştığımda, bu hata oluştu.

Sorunu nasıl çözeceğim:

Paket Gezgini -> Özellikler -> Java Derleme Yolu -> Kütüphaneler -> Projemi sağ tıklayın JRE Sistem Kütüphanesi'nde bir hata (Çapraz İşaret) görüyorum. Çünkü yol bulunamıyor. -> JRE Sistem Kütüphanesi'ne çift tıklayın -> "Çalışma Alanı Varsayılan JRE" seçeneğini seçin -> Son -> Tamam. -> BUM ÇALIŞIYOR

Bilginize.


0

Benim durumumda, dosyama yeni bir bağımlılık eklememin bir sonucuydu pom.xml.

Yeni bağımlılık, kütüphanenin eski bir sürümüne bağlıydı (2.5). Aynı kütüphane,pom.xml , fakat 3.0 sürümü gerekiyordu.

Bir nedenden ötürü, Maven bu çatışmalarla karşılaştığında, en son sürümü atlar. Eclipse uygulamasında pom.xml, bağımlılıkların nasıl çözüldüğünü görmek için alttaki "bağımlılık hiyerarşisi" sekmesini seçebilirsiniz. Burada, söz konusu kütüphanenin (ve dolayısıyla sınıfın) bu nedenle atlanıp atlanmadığını göreceksiniz.

Benim durumumda, yeni sürümü kilitlemek kadar basitti. Girdiyi sağ tıklatarak bunu yapabilirsiniz - içerik menüsünde kilitlemek için bir seçenek vardır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.