Kesalahan gerhana: dirujuk secara tidak langsung dari file .class yang diperlukan?

186

Saya mendapat kesalahan di Eclipse. Apa arti pesan kesalahan ini:

Jenis iglu.ir.TermVector tidak dapat diselesaikan. Ini secara tidak langsung direferensikan dari file .class yang diperlukan

karikari
sumber
21
Tambahkan tabung yang berisi iglu.ir.TermVector di jalur sumber proyek Anda.
Harry Joy
2
Jika Anda yakin kelasnya disediakan, coba bersihkan dan segarkan semua proyek Anda
Mirco
Ini terjadi pada saya karena ketergantungan transitif dalam toples saya
Janac Meena
persis! toples ini harus ada di dependensi pom.xml.
gaurav

Jawaban:

193

Ini berarti: "Kelas yang Anda gunakan membutuhkan kelas lain yang tidak ada di classpath." Anda harus memastikan (seperti yang disarankan Harry Joy) untuk menambahkan toples yang diperlukan ke classpath.

Arne Deutsch
sumber
3
Jawaban universal dan sederhana yang banyak membantu saya dalam kasus yang berbeda :) THX
Mariusz Chw
Dalam Anda mencoba menghapus kelas pada khususnya, periksa kelas induk untuk referensi ke jenis yang hilang. Jika itu tidak selalu apa artinya pesan ini, itu artinya mungkin sebagian besar waktu.
butallmj
Ya saya menemukan bahwa itu karena beberapa guci yang hilang dalam botol referensi :) Terima kasih.
Ali Imran
21
@ Andre, Mengapa dikatakan secara tidak langsung direferensikan kemudian? Tidakkah seharusnya dikatakan bahwa itu sama sekali tidak dirujuk?
Pacerier
2
@Pacerier itu tidak benar. Bukan kode Anda yang secara langsung mereferensikan tipe ini, melainkan sesuatu yang digunakan kode Anda, jadi ketergantungan dari kode Anda ke tipe itu adalah "hanya" transitif, tetapi ada di sana. "Secara tidak langsung" memberi tahu Anda ke mana harus mencari.
hiergiltdiestfu
22

Ini mungkin masalah Eclipse yang semakin bingung karena itu adalah kesalahan aktual. Saya mengabaikan kesalahan dan menjalankan layanan web yang titik akhir pengaduannya, dan itu berjalan dengan baik, kecuali karena harus berurusan dengan dialog setiap kali saya ingin menjalankannya. Hanya kesalahan buram lain yang tidak memberi tahu saya apa pun.

Jerry Miller
sumber
Itu juga tidak ada dalam toples. Itu ada di salah satu proyek yang termasuk dalam semua proyek yang disertakan di mana itu relevan.
Jerry Miller
3
Saya sudah mengalami masalah ini dalam gerhana, namun membangun melalui pakar bekerja dengan baik. Cara mengatasinya adalah menghapus dan mengimpor kembali proyek di ruang kerja gerhana yang berisi kelas yang diperlukan.
PiersyP
Ini mungkin terjadi kadang-kadang, tetapi saya mengalami kesalahan yang memberikan respons yang sama, dan proyek tidak dapat dibangun.
Christopher Connery
13

Kadang-kadang terjadi pada saya, saya selalu memperbaikinya dengan perintah "mvn eclipse: clean" untuk membersihkan properti lama dan kemudian menjalankan mvn eclipse: eclipse -Dwtpversion = 2.0 (untuk proyek web tentu saja). Ada beberapa properti lama yang disimpan sehingga gerhana kadang-kadang bingung.

Mário Kapusta
sumber
Saya membersihkan proyek (dari Project-> Clean ...) dan berhasil.
Anu Shibin Joseph Raj
mvn eclipse:cleandan / atau mvn eclipse:eclipsetampaknya merupakan trik sulap untuk membuatnya bekerja.
Antoine Martin
13

Saya memiliki kesalahan ini karena repositori pakar lokal yang rusak .

Jadi, untuk memperbaiki masalah, yang harus saya lakukan adalah pergi ke repositori saya dan menghapus folder di mana .jar yang bersangkutan, lalu memaksa sebuah update mavendi Eclipse.

Xavier Portebois
sumber
1
Ini bekerja untuk saya, sementara di atas semua tidak. Masalah terjadi ketika salah satu rekan tim saya memperbarui versi repositori dari pom.
iaL
8

Kedengarannya seperti ini telah menjadi masalah yang diketahui (Bug 67414) yang diselesaikan pada 3.0 ... seseorang telah berkomentar bahwa itu terjadi pada mereka di 3.4 juga.

Sementara itu, pekerjaan sekitar adalah menghapus Perpustakaan Sistem JRE dari proyek dan kemudian menambahkannya kembali.

Here are the steps:

Pergi ke properti proyek dengan kesalahan build (klik kanan> Properties)

Lihat tab "Libraries" di bagian "Build Path"

Temukan "Pustaka Sistem JRE" di daftar (jika ini tidak ada maka pesan kesalahan ini bukan bug gerhana tetapi proyek yang salah dikonfigurasi)

Hapus "Perpustakaan Sistem JRE"

Tekan "Tambah Perpustakaan ...", Pilih "JRE System Library" dan tambahkan JRE yang sesuai untuk proyek (mis. 'WorkREace default JRE')

Tekan "Selesai" dalam pemilihan perpustakaan dan "OK" di properti proyek dan kemudian tunggu untuk membangun kembali proyek

Semoga kesalahan akan teratasi ...

NPKR
sumber
Ya. Saya memiliki masalah yang sama dengan spring-web-3.0.1.RELEASE. Sementara itu terdaftar sebagai ketergantungan pada pom.xml, dan sudah berfungsi sebagai ketergantungan pada beberapa referensi, ketika saya membuat http.csrf (). disable (). cors (). disable (). httpBasic (). dan (). otorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permitAll (). anyRequest (). Authentified (); Itu rusak. Lalu saya mengunduh file jar dan mengimpornya dengan cara manual tradisional.
Tsakiroglou Fotis
5

Kesalahan ini terjadi ketika kelas-kelas dalam file jar tidak mengikuti struktur yang sama seperti struktur folder jar.

misal jika file kelas Anda memiliki paket com.test.exam dan file classes.jar yang dibuat dari file kelas ini memiliki struktur test.exam ... kesalahan akan dilempar. Anda perlu memperbaiki struktur paket dari kelas Anda. Jar dan kemudian memasukkannya dalam jalur build ecplipse ...

Mayur
sumber
4

Saya mendapat pengecualian ini karena gerhana bekerja di versi jdk yang berbeda, hanya berubah menjadi yang benar, bersih dan membangun dan bekerja!

Orlando Valencia
sumber
3

Saya punya kasus menarik tentang masalah ini dengan Eclipse 4.4.2. Proyek saya (P1) mereferensikan kelas eksternal (proyek P2) dengan dua metode dengan nama yang sama tetapi jenis argumen yang berbeda:

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

Jenis Itemitu terkandung dalam P3 proyek ketiga, yang saya tidak ingin terlihat di sini. P1 hanya memanggil metode pertama:

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

Jadi metode kedua, yang menggunakan Itemkelas, tidak digunakan, dan memang benar P3 tidak ada dalam kompilasi classpath - mengapa harus jika tidak digunakan.

Namun Eclipse memberitahuku

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

Kompilasi dari baris perintah tidak menghasilkan masalah seperti itu. Mengubah nama metode kedua (tidak digunakan di sini!) Membuat masalah hilang di Eclipse juga.

Renardo
sumber
2
Saya mengalami masalah yang sama persis dengan Eclipse Photon Release (4.8.0)
Delphin
3

Apa yang diperbaiki untuk saya adalah right clicking on project > Maven > Update Project

Eduardo Dennis
sumber
2

Jika Anda masih tidak dapat menemukan kesalahan dengan pengaturan Anda, Anda dapat mencoba Proyek -> Bersihkan dan bersihkan semua proyek di ruang kerja.

EDIT: Maaf, tidak melihat saran dari verbose_mode ... hal yang sama

Denis
sumber
2

Bagi saya, itu terjadi ketika saya memutakhirkan jdk saya ke 1.8.0_60 dengan set toples lama saya telah digunakan untuk waktu yang lama. Jika saya kembali ke jdk1.7.0_25, semua masalah ini hilang. Tampaknya ada masalah tentang kompatibilitas antara JRE dan perpustakaan.

Ming Leung
sumber
1

Saya mendapatkan kesalahan ketika saya hanya mengubah beberapa pengaturan svn dan tidak ada apa pun dalam kode. Hanya membersihkan proyek memperbaiki kesalahan.

pengguna2774465
sumber
1

Dalam kasus saya, saya membuat proyek dan membuatnya minSdkVersion=9dan targetSdkVersion=17. Saya menggunakan secara otomatis libs/android-support-v4.jar. Saya juga harus memanfaatkan ActionBarActivitymenggunakan android-support-v7-appcomapt.jar. Jadi saya hanya menyalin android-support-v7-appcompat.jarfile dari android-sdk/extras/andrid/support/v7/appcompat/libsfolder dan menempelkannya ke libsfolder proyek saya . Dan ini menyebabkan kesalahan di atas. Jadi pada dasarnya, saya perlu meletakkan android-support-v4.jarfile android-sdk/extras/andrid/support/v7/appcompat/libsjuga ke libsfolder proyek saya . Sesuai pengetahuan saya v7.jarfile memiliki dependensi pada v4.jarfile. Jadi, dibutuhkan v4.jarfile sendiri , bukan proyek saya, v4.jarfile yang dibuat secara otomatis .

laaptu
sumber
1

Cepat dan Sederhana, saya memperbaikinya dengan cara ini (saya menggunakan versi ADT: v21.0.0-531062 pada edisi Windows XP home)

  1. File manifes yang dibuka.
  2. Mengubah minSdkVersion proyek yang ada ke nilai yang sama dengan maxSdkVersion (saran: mungkin baik untuk membuat proyek baru dan melihat apa itu maxSdkVersion)
  3. Simpan file manifes.
  4. Klik kanan proyek dan pilih Bangun Proyek.
  5. Dari menu atas: Proyek - Bersihkan .. - centang Hanya proyek yang relevan, di bawah ini saya periksa Mulai segera membangun dan Buat hanya proyek yang dipilih dan OK.
  6. buka file java - TIDAK ada kesalahan merah lagi!
  7. Kembali ke langkah 1 di atas dan ubah Kembali minSdkVersion ke nilai asli itu (untuk mendukung sebanyak mungkin versi Android).

Ini berhasil, tetapi masalah kembali setiap beberapa hari. Saya melakukan hal yang sama seperti di atas dan itu memecahkan dan membuat saya berkembang.

pengguna3445991
sumber
0

Selain penyebab yang sudah disarankan dari kehilangan file kelas kesalahan ini juga dapat menunjukkan file kelas duplikat, gerhana melaporkan kesalahan ini ketika file kelas di jalur build menggunakan kelas lain yang memiliki banyak definisi di jalur build.

MilesHampson
sumber
0

Karena Anda memberi kami detail yang sangat sedikit, kemungkinan besar apa yang Anda lakukan, yang merupakan kesalahan yang sangat mudah dibuat, adalah bahwa alih-alih menuju ke

Build Path > Configure Build Path > Projects

dan menambahkan folder proyek tambahan dari sana, sebagai gantinya Anda pergi ke

Build Path > Configure Build Path > Libraries

dan menambahkan folder proyek Anda dari sana sebagai gantinya.

Ini jelas merupakan kasus jika semua kode Anda benar, tetapi setelah mengatur ulang impor secara otomatis melalui ctrl+space pintasan, alih-alih pernyataan impor Anda yang merujuk ke proyek com.your.additional, referensi Anda semua mengarah ke proyek bin.com.your.additional.

Perhatikan tempat sampah. Berarti bahwa Anda -adalah- secara tidak langsung merujuk ke kelas Anda dengan memperlakukan struktur folder proyek Anda yang lain sebagai pustaka, membuat IDE Anda melakukan semua wokr untuk menemukan kelas biner persis yang Anda maksud.

Untuk memperbaikinya, hapus folder dari Perpustakaan, dan sebagai gantinya tambahkan di bawah tab Proyek, dan atur ulang impor Anda. Proyek Anda seharusnya bekerja dengan baik.

steelmonkey
sumber
0

Ketika saya menggunakan versi gerhana baru dan mencoba menggunakan ruang kerja sebelumnya yang saya gunakan dengan versi gerhana lama, kesalahan ini terjadi.

Inilah cara saya memecahkan masalah:

Klik kanan proyek saya di Package Explorer -> Properties -> Java Build Path -> Libraries -> Saya melihat kesalahan (Cross Sign) di JRE System Library. Karena jalan tidak dapat ditemukan. -> Klik dua kali Pustaka Sistem JRE -> Pilih opsi "Workspace Default JRE" -> Finish -> OK. -> BUM ITU BEKERJA

FYI.

oiyio
sumber
0

Dalam kasus saya itu adalah hasil dari menambahkan ketergantungan baru ke pom.xmlfile saya .

Ketergantungan baru tergantung pada versi lama perpustakaan (2.5). Perpustakaan yang sama diperlukan oleh perpustakaan lain di sayapom.xml , tetapi itu membutuhkan versi 3.0.

Untuk beberapa alasan, ketika Maven menemukan konflik ini, ia hanya menghilangkan versi terbaru. Di Eclipse saat melihat pom.xmlAnda dapat memilih tab "hierarki ketergantungan" di bagian bawah untuk melihat bagaimana dependensi diselesaikan. Di sini Anda akan menemukan jika perpustakaan (dan dengan demikian kelas) yang bersangkutan telah dihilangkan karena alasan ini.

Dalam kasus saya itu semudah mengunci versi yang lebih baru. Anda dapat melakukannya dengan mengklik kanan entri - ada opsi untuk menguncinya di menu konteks.

Chris Staikos
sumber
0

Arahkan JRE di jalur Build ke JDK. Itu berhasil bagi saya.

Neeleshkumar S
sumber