2012-08-14 39 views
7

Obecnie badamy wykorzystanie OneJar w naszej aplikacji (z wielu powodów), ale nasza aplikacja korzysta z wielu niestandardowych URLClassloader s, aby załadować rozszerzenia aplikacji.OneJar i dynamiczne ładowanie klasy

Po dołączeniu do słoika "OneJar" otrzymujemy wyjątki od ClassNotFound. Klasy te znajdują się w pakiecie Jar, a my po prostu polegamy na mechanizmie klasowym, aby rozwiązać relację rodzic/dziecko.

To znaczy. Mamy wspólny interface, który jest przechowywany w pakiecie Jar (który powinien należeć do kontekstu nadrzędnego modułu ładującego klasy). Rozszerzenie implementuje tę interface (pozwalającą nam wywoływać rozszerzenie) i polega na możliwościach programu ładującego klasy dla podrzędnych, aby używał funkcji odnajdywania zasobów nadrzędnego modułu ładującego klasy.

Czy ktoś miał jakiekolwiek doświadczenie z tym lub rzucić jakiekolwiek światło na temat, w jaki sposób możemy go rozwiązać.

byłbym zainteresowany w innych podobnych mechanizmów (do wiązania nasza biblioteka Jar użytkownika do jednego zasobu słoik, który nie wymaga użycia do unjar wszystko i Jar w jednym pliku)

+0

Wiesz, jeśli masz kochać odwagę ludzie głosują, kto w dół bez co najmniej o przyzwoitość komentarz co do zostawić dlaczego czułem, że jest to konieczne. To nie pomaga nikomu. Bez pewnego wyjaśnienia trudno jest dowiedzieć się, jak poprawić pytanie/odpowiedź w przyszłości. – MadProgrammer

Odpowiedz

6

znalazłem Robiłem niektóre założenia dotyczące sposobu, w jaki nasz moduł ładujący klasy został utworzony.

Przypuszczałem, że ładowarka klasa użyłby To ładującego klasy, jak to rodzic (tj getClass(). GetClassLoader()), ale nie było

Zamiast tego używał SystemClassLoader. Oznaczało to, że gdy program ładujący klasy class poszukiwał wspólnego interfejsu, nie mógł go znaleźć (ponieważ przeglądał on program SystemClassLoader, a nie moduł ładujący klasy OneJar).

I rektyfikowany to dodając CustomClassLoader.class.getClassLoader() do konstruktora naszej niestandardowej klasy loader

+0

Czy możesz zaakceptować własną odpowiedź? – fglez

+0

@fglez Myślał, że to było "zrobione", ale jeśli to pomaga ... – MadProgrammer