Tôi đã tạo một Gói trong Eclipse và sử dụng liên kết "Khởi chạy khung" cho tab "Tổng quan". Tôi đã tạo một giao diện (TestService) trong gói của tôi và mã sẽ tạo một proxy cho nó (trong Trình trợ giúp). Tôi gọi mã này trong Activator của Bundle, và nhận được:Làm thế nào để bạn tạo/khởi tạo Javassist ClassPool bên trong một gói OSGi?
Caused by: javassist.NotFoundException: com.test.services.TestService
at javassist.ClassPool.get(ClassPool.java:436)
at com.test.services.Helper.get(Helper.java:46)
Nó ném ngay tại ClassPool.get đầu tiên():
ClassPool pool = ClassPool.getDefault();
CtClass result = pool.get(TestService.class.getName());
...
TestService là công khai và trong cùng một gói, và Bundle, là người trợ giúp, tạo ra ngoại lệ. Rõ ràng, nó không đủ tốt để chỉ làm "ClassPool.getDefault()". Vậy tôi cần làm gì để ClassPool thấy các lớp bên trong Bundle? Tôi có phải nhập gói của riêng mình không?
Tôi giả định rằng gói javassist chính nó sẽ cần khả năng hiển thị của các lớp bạn đang yêu cầu nó tải. Thật không may tôi không biết làm thế nào javassist nhìn lên lớp học. Bạn có thể nói nó sử dụng trình nạp lớp nào không, hoặc nó chỉ đoán ngẫu nhiên? Nó có thể được cấu hình với các đối tượng 'Lớp' thực tế hay không, hoặc nó có nhấn mạnh vào tên lớp được cung cấp dưới dạng Strings không? –
Tôi mới bắt đầu với Javassist, vì vậy tôi không chắc chắn, nhưng tôi sẽ kiểm tra tối nay và trả lời bạn. Nhưng, tôi nghi ngờ bạn chỉ ra rằng vấn đề đã được; OSGi giới hạn các gói mà Gói có thể thấy, do đó, có thể là đủ để thêm gói của riêng tôi vào "gói nhập" của Gói Javassist. –