MATLAB jest skonfigurowany do przeszukiwania swojej statycznej ścieżki do klasy java przed przeszukaniem ścieżki dynamicznej modyfikowalnej przez użytkownika. Niestety, ścieżka statyczna zawiera całkiem sporo bardzo starych bibliotek publicznych, więc jeśli spróbujesz użyć nowej wersji, może się skończyć ładowaniem niewłaściwej implementacji i otrzymaniem błędów.Najlepszy sposób na przesłonięcie domyślnej statycznej jailaclasspath MATLABa
Na przykład ścieżka statyczna zawiera starą kopię pliku google-collections.jar, która od dawna została wyparta przez bibliotekę guawy Google i która ma niektóre z tych samych nazw klas (np. Com.google.common.base. Obiekty). W rezultacie, jeśli wywołasz metodę Guava, która używa nowszej metody jednej z takich klas, otrzymasz zaskakujące NoSuchMethodErrors, ponieważ jar Google-collections zostanie znaleziony jako pierwszy.
Od R2012b, MATLAB pozwala na określenie dodatkowych słoików do dodania do statycznej ścieżki poprzez umieszczenie pliku javaclasspath.txt w folderze preferencji, ale to dodaje słoiki na końcu ścieżki i nie pozwala na przesłonięcie słoiki wbudowane w MATLAB.
Jaki jest najlepszy sposób obejścia tego?
Nie mogę myśleć w inny sposób, chociaż ryzykujesz problemy ze zgodnością, jeśli będziesz bałagan z zestawem plików JAR, które MATLAB ładuje do własnego użytku. – Amro
Tak, obawiam się, że to może być jedyny sposób obejścia tego. Matlab nie wydaje się używać programu ładującego klasy kontekstu wątku, więc nadpisuje, że nic nie zrobi. Naprawdę, powinni znaleźli sposób wyizolowania ich użycia tych słoików ze ścieżki modułu ładującego klasy używanej przez dostarczony przez użytkownika kod Java, ale jasne jest, że uzyskanie tego rodzaju poprawnych rzeczy nie jest dziedziną kompetencji Mathworks. –
@ChristopherBarber: Jasne jest, że poprawianie tego typu rzeczy nie jest jednym z obszarów kompetencji społeczności programistów Java. JSR 277 nie żyje, Project Jigsaw został wyparty _again_ do Javy 9, a OSGi jest dość skomplikowany i pracowity, by trzymać się czegoś takiego jak Matlab. Jeśli deweloperzy Java mają problemy z budowaniem systemu modułów, trudno jest winić Mathworks, że nie robi tego za nich. –