Mam natywną bibliotekę, którą należy dodać do java.library.path . Z argumentem JVM -Djava.library.path = ścieżka ... mogę ustawić ścieżkę tak, jak chcę.
Mój problem polega na tym, że moja inna biblioteka (raportowanie Pentaho) przeszukuje czcionki w oparciu o domyślną ścieżkę java.library.path (w tym katalogi systemowe itp.), A ustawienie ręczne zastępuje domyślną ścieżkę.
Więc: jak mogę dodać wpis ścieżki do domyślnego java.library.path zamiast go zastępować (co wydaje się być zrobione za pomocą -Djava.library.path)? (Nie chciałbym ręcznie dodawać domyślnej ścieżki, co nie byłoby przyjemne ze względu na wdrożenie)
EDYCJA: Przepraszamy za brakujące szczegóły; Pracuję z Eclipse. (Wdrożenie odbywa się za pomocą JNLP i tam mogę użyć nativelib w zasobach )
źródło
Odpowiedzi:
Zapomniałem o tym problemie ... Właściwie pytałem z Eclipse, przepraszam, że nie powiedziałem tego pierwotnie. A odpowiedź wydaje się zbyt prosta (przynajmniej przy 3.5; prawdopodobnie także przy starszych wersjach):
Argumenty konfiguracji uruchomienia Java: argumenty maszyny wirtualnej:
-Djava.library.path="${workspace_loc:project}\lib;${env_var:PATH}"
Nie wolno zapomnieć o cudzysłowach, w przeciwnym razie występują problemy ze spacjami w PATH.
źródło
Jeśli chcesz dodać natywną bibliotekę bez ingerencji
java.library.path
w środowisko Eclipse podczas programowania (aby uniknąć uwzględniania ścieżek bezwzględnych i konieczności dodawania parametrów do konfiguracji uruchamiania), możesz podać ścieżkę do lokalizacji bibliotek natywnych dla każdego Jar w kompilacji Java ścieżki dialogowe pod Native lokalizacji biblioteki . Należy zauważyć, że nazwa pliku biblioteki natywnej musi odpowiadać nazwie pliku Jar. Zobacz także ten szczegółowy opis .źródło
java.library.path
i wróciłem po znalezieniu rozwiązania w innym miejscu. Zmienię moją odpowiedź, aby była jaśniejsza.SWT umieszcza niezbędne natywne biblioteki DLL w pliku JAR. Wyszukaj przykład „org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar”.
Biblioteki DLL muszą znajdować się w katalogu głównym pliku JAR, plik JAR musi być podpisany, a biblioteka DLL musi znajdować się z sumą kontrolną w pliku META-INF / MANIFEST.MF, aby maszyna wirtualna mogła je pobrać.
źródło
java.library.path
. Czy sugerujesz, że szuka tylko korzeniajar
?W systemie Windows na przykład:
-Djava.library.path = "C: / MyLibPath;% PATH%"
% PATH% to Twoja stara ścieżka -Djava.library
źródło
Czy można to obejść, wywołując programowo System.load () w celu załadowania biblioteki natywnej? Ta metoda (w przeciwieństwie do System.loadLibrary () ) umożliwia określenie ścieżki bezwzględnej.
źródło
https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 stwierdza, że nie ma mechaniki zastępowania zaimplementowanej w programie uruchamiającym Eclipse, a przynajmniej nie do wydania Juno.
Dlatego podczas uruchamiania Eclipse bez wcześniejszej wiedzy o ustawieniach domyślnych dodanie lub dodanie innego folderu biblioteki do java.library.path jest (prawie) niemożliwe.
Napisałem prawie, bo powinno dać się uruchomić Eclipse, zrzucić zawartość java.library.path i zatrzymać Eclipse jednym poleceniem. Zrzut zostałby przeanalizowany, a następnie przyjęty jako dane wejściowe do uruchomienia Eclipse, tj
#!/bin/bash # get default value of java.library.path (somehow) default_lib_path=$( start_dump_stop_eclipse_somehow ) # now launch Eclipse eclipse --launcher.appendVmargs \ -vmargs \ -Djava.library.path="/my/native/lib/folder:${default_lib_path}"
źródło
W systemach UNIX można dołączyć do zmiennej środowiskowej LD_LIBRARY_PATH. W systemie Windows maszyna JVM automatycznie ustawia właściwość systemową java.library.path na PATH; więc jeśli dll znajduje się na Twojej PATH, gotowe.
źródło
Okno-> Preferencje-> Java-> Zainstalowane środowiska JRE. Następnie wybierz bieżące środowisko JRE (JDK) i kliknij Edytuj. Wypełnij domyślne argumenty maszyny wirtualnej: -Djava.library.path = / usr / local / xuggler / lib. Gotowe!
źródło
Rozwiązanie zaproponowane przez Roba Elsnera w jednym z powyższych komentarzy działa doskonale (OSX 10.9, Eclipse Kepler). Należy dołączyć ich dodatkowe ścieżki do ścieżek oddzielonych znakiem „:”.
źródło
Nazwa pliku biblioteki natywnej musi odpowiadać nazwie pliku Jar. To jest bardzo ważne. Upewnij się, że nazwa jar i nazwa dll są takie same. Zobacz także post od Fabiana Steega. Mój plik do pobrania dla jawin zawierał różne nazwy dll i jar. Było to jawin.jar i jawin d .dll, zwróć uwagę na dodatkowe „d” w nazwie pliku dll. Po prostu zmieniłem jego nazwę na jawin.dll i ustawiłem jako natywną bibliotekę w zaćmieniu, jak wspomniano w poście „ http://www.eclipsezone.com/eclipse/forums/t49342.html ”
źródło
Z jakiegoś powodu nie mogłem uruchomić wielu folderów (dobrze to działało przez jakiś czas, ale gdy tylko potrzebowałem więcej bibliotek dll i dodałem więcej folderów, żaden z białymi spacjami w ścieżce). Następnie skopiowałem wszystkie potrzebne biblioteki DLL do jednego folderu i miałem to jako moją java.library.path i zadziałało. Nie mam wytłumaczenia - gdyby ktoś to zrobił, byłoby świetnie.
źródło
Wiele z istniejących odpowiedzi zakłada, że chcesz ustawić to dla konkretnego projektu, ale musiałem ustawić to dla samego Eclipse , aby obsługiwać zintegrowane uwierzytelnianie dla sterownika SQL Server JDBC.
Aby to zrobić, postępowałem zgodnie z tymi instrukcjami, aby uruchomić Eclipse z wiersza poleceń Java zamiast z jego normalnego programu uruchamiającego. Następnie zmodyfikowałem ten skrypt, aby dodać mój argument -Djava.library.path do wiersza poleceń Java.
źródło
java.library.path
jest inicjowany z wartościami powyższych zmiennych na odpowiedniej platformie.To powinno działać na każdym IDE.
Możesz sprawdzić, czy wartość jest taka, jakiej oczekujesz, dzwoniąc
java -XshowSettings:properties
źródło
W systemie Windows stwierdziłem, że ważne jest, aby uruchomić Eclipse z wiersza poleceń, a nie z menu Start lub skrótu, pod warunkiem, że natywna biblioteka DLL znajduje się w katalogu w Twojej ścieżce. Najwyraźniej zapewnia to, że właściwy katalog znajduje się na ścieżce.
źródło