Lỗi Eclipse: được tham chiếu gián tiếp từ các tệp. Class yêu cầu?


185

Tôi đã gặp một lỗi trong Eclipse. Thông báo lỗi này có nghĩa là gì:

Loại iglu.ir.TermVector không thể được giải quyết. Nó được tham chiếu gián tiếp từ các tập tin. Class yêu cầu


21
Thêm jar chứa iglu.ir.TermVector trong đường dẫn nguồn của dự án của bạn.
Harry Joy

2
Nếu bạn chắc chắn lớp học được cung cấp, hãy thử làm sạch và làm mới tất cả các dự án của bạn
Mirco

Điều này xảy ra với tôi vì sự phụ thuộc quá độ trong lọ của tôi
Janac Meena

chính xác! jar này cần phải có mặt trong các phụ thuộc pom.xml.
bò tót

Câu trả lời:


193

Nó có nghĩa là: "Một lớp mà bạn sử dụng cần một lớp khác không có trên đường dẫn lớp." Bạn nên đảm bảo (như Harry Joy gợi ý) để thêm bình cần thiết vào đường dẫn lớp.


3
Câu trả lời phổ quát và đơn giản giúp tôi rất nhiều trong các trường hợp khác nhau :) THX
Mariusz Chw 10/12/13

Trong khi bạn đang cố gắng loại bỏ các lớp cụ thể, hãy kiểm tra các lớp cha để tham khảo loại còn thiếu. Nếu đó không phải lúc nào cũng là thông điệp này, thì đó có nghĩa là hầu hết thời gian.
butallmj

Có tôi thấy rằng đó là do một số lọ bị thiếu trong các lọ được tham chiếu :) Cảm ơn.
Ali Imran

21
@Arne, Tại sao nó lại nói gián tiếp tham chiếu? Không nên nói rằng nó hoàn toàn không được tham chiếu?
Pacerier

2
@Pacerier đó không phải là sự thật. Không phải mã của bạn trực tiếp tham chiếu loại này, mà là mã của bạn sử dụng, do đó, sự phụ thuộc từ mã của bạn vào loại đó là "chỉ" mang tính bắc cầu, nhưng nó ở đó. "Gián tiếp" cho bạn biết nơi để tìm.
hiergiltdiestfu

22

Đây có thể là một vấn đề của Eclipse đang bị nhầm lẫn vì đây là một lỗi thực tế. Tôi đã bỏ qua lỗi và chạy dịch vụ web có endpointInterface mà nó phàn nàn và nó chạy tốt, ngoại trừ việc phải xử lý hộp thoại mỗi khi tôi muốn chạy nó. Chỉ là một lỗi mờ đục mà không cho tôi biết gì.


Nó cũng không trong một cái lọ. Đó là một trong những dự án có trong tất cả các dự án được bao gồm trong đó có liên quan.
Jerry Miller

3
Tôi đã gặp vấn đề này trong nhật thực, nhưng việc xây dựng thông qua maven vẫn hoạt động tốt. Cách khắc phục là xóa và nhập lại dự án trong không gian làm việc nhật thực có chứa các lớp cần thiết.
PiersyP

Điều này đôi khi có thể xảy ra, nhưng tôi đã gặp phải các lỗi có cùng phản hồi và dự án không thể xây dựng.
Christopher Connery

13

Đôi khi điều đó xảy ra với tôi, tôi luôn cố định rằng với lệnh "mvn eclipse: clean" để xóa các thuộc tính cũ và sau đó chạy mvn eclipse: eclipse -Dwtpversion = 2.0 (tất nhiên đối với dự án web). Có một số thuộc tính cũ được lưu để đôi khi nhật thực bị lẫn lộn.


Tôi đã làm sạch dự án (từ Project-> Clean ...) và nó đã hoạt động.
Anu Shibin Joseph Raj

mvn eclipse:cleanvà / hoặc mvn eclipse:eclipsedường như là trò ảo thuật để làm cho nó hoạt động.
Antoine Martin

13

Tôi đã có lỗi này vì một kho lưu trữ maven cục bộ bị hỏng .

Vì vậy, để khắc phục sự cố, tất cả những gì tôi phải làm là vào kho lưu trữ của mình và xóa thư mục có .jar liên quan, sau đó buộc một update maventrong Eclipse.


1
Điều này làm việc cho tôi, trong khi trên tất cả là không. Vấn đề xảy ra khi một trong những đồng đội của tôi cập nhật phiên bản của kho lưu trữ từ pom.
iaL

8

Có vẻ như đây là một vấn đề đã biết (Bug 67414) đã được giải quyết trong 3.0 ... ai đó đã nhận xét rằng nó cũng xảy ra với họ trong 3,4.

Trong lúc 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.

Here are the steps:

Chuyển đến thuộc tính của dự án với lỗi xây dựng (nhấp chuột phải> Thuộc tính)

Xem tab "Thư viện" trong phần "Xây dựng đường dẫn"

Tìm "Thư viện hệ thống JRE" trong danh sách (nếu thiếu thì thông báo lỗi này không phải là lỗi nhật thực mà là một dự án được cấu hình sai)

Xóa "Thư viện hệ thống JRE"

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 không gian làm việc')

Nhấn "Kết thúc" trong lựa chọn thư viện và "OK" trong thuộc tính dự án và sau đó chờ xây dựng lại dự án

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


Có. Tôi gặp vấn đề tương tự với spring-web-3.0.1.RELEASE. Trong khi nó được đăng ký như là một phụ thuộc trong pom.xml và đã hoạt động như một phụ thuộc trong một số tài liệu tham khảo, khi tôi tạo http.csrf (). vô hiệu hóa (). cors (). vô hiệu hóa (). httpBasic (). và (). AuthorizeRequests () .antMatchers (PUBLIC_MATCHERS) .permit ALL (). anyRequest (). xác thực (); Nó bị hỏng. Sau đó, tôi đã tải xuống tệp jar và nhập nó theo cách thủ công truyền thống.
Tsakiroglou Fotis

5

Lỗi này xảy ra khi các lớp trong tệp jar không tuân theo cùng cấu trúc như cấu trúc thư mục của tệp jar ..

ví dụ: nếu tệp lớp của bạn có gói com.test.exam và các lớp.j.j được tạo ra từ tệp lớp này có cấu trúc test.exam ... lỗi sẽ bị ném. Bạn cần sửa cấu trúc gói của class.jar và sau đó đưa nó vào đường dẫn xây dựng nhật thực ...


4

Tôi đã có ngoại lệ này vì nhật thực đang hoạt động trong một phiên bản khác của jdk, chỉ cần thay đổi thành chính xác, sạch sẽ và xây dựng và làm việc!


3

Tôi đã có một trường hợp thú vị về vấn đề này với Eclipse 4.4.2. Dự án của tôi (P1) đã tham chiếu một lớp bên ngoài (dự án P2) với hai phương thức có cùng tên nhưng các loại đối số khác nhau:

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

Loại Itemnày được chứa trong dự án thứ ba P3, mà tôi không muốn thấy ở đây. P1 chỉ gọi phương thức đầu tiên:

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

Vì vậy, phương thức thứ hai, sử dụng Itemlớp, không được sử dụng và đúng là P3 không có trong đường dẫn biên dịch - tại sao nó không được sử dụng.

Vẫn còn Eclipse nói với tôi

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

Biên dịch từ dòng lệnh không tạo ra bất kỳ vấn đề như vậy. Việc thay đổi tên của phương thức thứ hai (không được sử dụng ở đây!) Cũng khiến vấn đề biến mất trong Eclipse.


2
Tôi đang gặp vấn đề chính xác tương tự với Bản phát hành Photon của Eclipse (4.8.0)
Delphin

3

Điều cố định nó cho tôi là right clicking on project > Maven > Update Project


2

Nếu bạn vẫn không thể tìm thấy bất cứ điều gì sai với thiết lập của mình, bạn có thể thử Project -> Làm sạch và làm sạch tất cả các dự án trong không gian làm việc.

EDIT: Xin lỗi, không thấy đề xuất của verbose_mode ... điều tương tự


2

Đối với tôi, điều đó xảy ra khi tôi nâng cấp jdk của mình lên 1.8.0_60 với bộ lọ cũ của tôi đã được sử dụng trong một thời gian dài. Nếu tôi rơi trở lại jdk1.7.0_25, tất cả những vấn đề này sẽ biến mất. Có vẻ như một vấn đề về khả năng tương thích giữa JRE và các thư viện.


1

Tôi đã gặp lỗi khi tôi chỉ thay đổi một số cài đặt svn và không có gì trong mã. Chỉ cần làm sạch các dự án đã sửa lỗi.


1

Trong trường hợp của tôi, tôi đã tạo ra một dự án và thực hiện nó minSdkVersion=9targetSdkVersion=17. Tôi đã sử dụng tự động tạo ra libs/android-support-v4.jar. Tôi cũng đã phải sử ActionBarActivitydụng android-support-v7-appcomapt.jar. Vì vậy, tôi chỉ sao chép android-support-v7-appcompat.jartệp từ android-sdk/extras/andrid/support/v7/appcompat/libsthư mục và dán nó vào libsthư mục dự án của tôi . Và điều này gây ra lỗi trên. Vì vậy, về cơ bản, tôi cần phải đặt android-support-v4.jartập tin từ thư mục android-sdk/extras/andrid/support/v7/appcompat/libsdự án của tôi libs. Theo hiểu biết của tôi, v7.jartập tin có phụ thuộc vào v4.jartập tin. Vì vậy, nó cần v4.jartập tin riêng của nó , thay vì dự án của tôi, tự động tạo v4.jartập tin.


1

Nhanh chóng và đơn giản là tôi đã sửa nó theo cách này (Tôi sử dụng phiên bản ADT: v21.0.0-5 31062 trên phiên bản Windows XP)

  1. Mở tệp kê khai.
  2. Đã thay đổi minSdkVersion của dự án hiện tại thành cùng giá trị với maxSdkVersion (khuyên: có thể tốt khi tạo dự án mới và xem maxSdkVersion của nó là gì)
  3. Lưu tệp kê khai.
  4. Nhấp chuột phải vào dự án và chọn Build Project.
  5. Từ menu trên cùng: Dự án - Sạch sẽ .. - kiểm tra Chỉ dự án có liên quan, bên dưới tôi đã kiểm tra Bắt đầu xây dựng ngay lập tức và Chỉ xây dựng các dự án đã chọn và OK.
  6. mở tệp java - KHÔNG còn lỗi đỏ nữa!
  7. Quay lại bước 1 ở trên và thay đổi Quay lại minSdkVersion thành giá trị ban đầu của nó (để supoprt càng nhiều phiên bản Android càng tốt).

Nó hoạt động NHƯNG vấn đề trở lại cứ sau vài ngày. Tôi làm tương tự như trên và nó giải quyết và cho phép tôi phát triển.


0

Ngoài nguyên nhân đã được đề xuất là thiếu tệp lớp, lỗi này cũng có thể chỉ ra tệp lớp trùng lặp, nhật thực báo cáo lỗi này khi tệp lớp trên đường dẫn xây dựng sử dụng một lớp khác có nhiều định nghĩa trong đường dẫn xây dựng.


0

Vì bạn cung cấp cho chúng tôi rất ít chi tiết, rất có thể những gì bạn đã làm, đó là một sai lầm cực kỳ dễ mắc phải, đó là thay vì hướng đến

Build Path > Configure Build Path > Projects

và thêm thư mục dự án bổ sung của bạn từ đó, thay vào đó bạn đã đi đến

Build Path > Configure Build Path > Libraries

và thêm thư mục dự án của bạn từ đó thay vào đó.

Đây là trường hợp chắc chắn nhất nếu mã của bạn hoàn toàn chính xác, nhưng khi tự động sắp xếp lại nhập thông qua ctrl+spacephím tắt, thay vì các câu lệnh nhập của bạn đề cập đến com.your.additableproject, tất cả các tham chiếu của bạn đều trỏ đến bin.com.your.additableproject.

Lưu ý thùng. Có nghĩa là bạn - gián tiếp tham chiếu đến lớp của mình bằng cách coi cấu trúc thư mục dự án khác của bạn như một thư viện, làm cho IDE của bạn thực hiện tất cả các công việc tìm kiếm lớp nhị phân chính xác mà bạn đang đề cập.

Để sửa lỗi này, hãy xóa thư mục khỏi Thư viện và thay vào đó thêm nó vào tab Dự án và sắp xếp lại việc nhập của bạn. Dự án của bạn nên hoạt động tốt.


0

Khi tôi sử dụng phiên bản nhật thực mới và thử sử dụng không gian làm việc trước đó mà tôi đã sử dụng với phiên bản nhật thực cũ, đã xảy ra lỗi này.

Đây là cách tôi giải quyết vấn đề:

Nhấp chuột phải vào dự án của tôi trên Gói Explorer -> Thuộc tính -> Đường dẫn xây dựng Java -> Thư viện -> Tôi thấy một lỗi (Dấu chéo) trên Thư viện hệ thống JRE. Bởi vì đường dẫn không thể được tìm thấy. -> Nhấp đúp vào Thư viện hệ thống JRE -> Chọn tùy chọn "JRE mặc định không gian làm việc" -> Kết thúc -> OK. -> BUM IT ĐANG LÀM VIỆC

FYI.


0

Trong trường hợp của tôi, đó là kết quả của việc tôi thêm một phụ thuộc mới vào pom.xmltệp của mình .

Sự phụ thuộc mới phụ thuộc vào một phiên bản cũ của thư viện (2.5). Thư viện đó cũng được yêu cầu bởi một thư viện khác trong tôi pom.xml, nhưng nó yêu cầu phiên bản 3.0.

Vì một số lý do, khi Maven gặp phải những xung đột này, nó chỉ đơn giản là bỏ qua phiên bản mới nhất. Trong Eclipse khi xem, pom.xmlbạn có thể chọn tab "phân cấp phụ thuộc" ở phía dưới để xem cách giải quyết các phụ thuộc. Ở đây bạn sẽ tìm thấy nếu thư viện (và do đó lớp) trong câu hỏi đã bị bỏ qua vì lý do này.

Trong trường hợp của tôi, nó đơn giản như việc khóa phiên bản mới hơn. Bạn có thể làm như vậy bằng cách nhấp chuột phải vào mục - có một tùy chọn để khóa nó trong menu ngữ cảnh.


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.