Eu tenho uma biblioteca nativa que precisa ser adicionada a java.library.path . Com o argumento JVM -Djava.library.path = path ... posso definir o caminho conforme desejo.
Meu problema é que minha outra biblioteca (pentaho reporting) busca fontes com base no java.library.path padrão (incluindo diretórios de sistema, etc.) e a configuração manual substitui o caminho padrão.
Então: como posso adicionar uma entrada de caminho ao java.library.path padrão em vez de substituí-lo (o que parece ser feito com -Djava.library.path)? (Eu não gostaria de adicionar o caminho padrão manualmente, o que não seria bom para fins de implantação)
EDIT: Desculpe pela falta de detalhes; Estou trabalhando com o Eclipse. (A implantação é feita com JNLP e aí posso usar o nativelib nos recursos )
fonte
Respostas:
Tinha esquecido esse problema ... Na verdade, eu estava perguntando com Eclipse, desculpe por não ter declarado isso originalmente. E a resposta parece ser muito simples (pelo menos com 3.5; provavelmente com versões mais antigas também):
Argumentos da configuração de execução Java: Argumentos da VM:
Não se deve esquecer as aspas, caso contrário, haverá problemas com espaços no PATH.
fonte
Se você deseja adicionar uma biblioteca nativa sem interferir
java.library.path
no tempo de desenvolvimento no Eclipse (para evitar incluir caminhos absolutos e ter que adicionar parâmetros à configuração de ativação), você pode fornecer o caminho para o local das bibliotecas nativas para cada Jar no Java Build Caixa de diálogo de caminho em localização da biblioteca nativa . Observe que o nome do arquivo da biblioteca nativa deve corresponder ao nome do arquivo Jar. Veja também esta descrição detalhada .fonte
java.library.path
e voltei depois de encontrar a solução em outro lugar. Editarei minha resposta para tornar isso mais claro.O SWT coloca as DLLs nativas necessárias em um JAR. Procure por "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" para obter um exemplo.
As DLLs devem estar na raiz do JAR, o JAR deve ser assinado e a DLL deve aparecer com checksum no META-INF / MANIFEST.MF para que a VM as busque.
fonte
java.library.path
. Você sugere que só busque a raiz dejar
?No Windows, assim:
-Djava.library.path = "C: / MyLibPath;% PATH%"
% PATH% é o seu antigo -Djava.library.path
fonte
Você pode contornar isso chamando System.load () programaticamente para carregar sua biblioteca nativa? Este método (ao contrário de System.loadLibrary () ) permite que você especifique um caminho absoluto.
fonte
https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 afirma que não há nenhuma mecânica de substituição implementada no iniciador do Eclipse, pelo menos não até o lançamento do Juno.
Portanto, é (quase) impossível anexar ou anexar outra pasta de biblioteca a java.library.path ao iniciar o Eclipse sem conhecimento prévio da configuração padrão.
Eu escrevi quase, porque deve ser possível deixar o Eclipse inicializar, despejar o conteúdo de java.library.path e parar o Eclipse em um comando. O dump seria analisado e, em seguida, considerado como entrada para iniciar o Eclipse, ou seja,
fonte
Em sistemas UNIX, você pode anexar à variável de ambiente LD_LIBRARY_PATH. No Windows, a JVM configura automaticamente a propriedade do sistema, java.library.path, para PATH; portanto, se a dll estiver em seu PATH, você está pronto.
fonte
Janela-> Preferências-> Java-> JREs instalados. Em seguida, escolha seu JRE (JDK) atual e clique em Editar. Preencha os argumentos padrão da VM: -Djava.library.path = / usr / local / xuggler / lib. Feito!
fonte
A solução oferecida por Rob Elsner em um dos comentários acima funciona perfeitamente (OSX 10.9, Eclipse Kepler). É necessário anexar seus caminhos adicionais àqueles separados por ":".
fonte
O nome do arquivo da biblioteca nativa deve corresponder ao nome do arquivo Jar. Isto é muito, muito importante. Certifique-se de que o nome do jar e o nome da dll são iguais. Além disso, consulte a postagem de Fabian Steeg Meu download para jawin continha nomes diferentes para dll e jar. Era jawin.jar e jawin d .dll, observe o 'd' extra no nome do arquivo dll. Eu simplesmente o renomeei para jawin.dll e o defini como uma biblioteca nativa no eclipse, conforme mencionado na postagem " http://www.eclipsezone.com/eclipse/forums/t49342.html "
fonte
Por algum motivo, não consegui fazer com que várias pastas funcionassem (bem funcionou por um tempo, mas assim que precisei de mais dlls e adicionei mais pastas, nenhuma com espaços em branco no caminho). Em seguida, copiei todas as dlls necessárias para uma pasta e tive isso como meu java.library.path e funcionou. Não tenho uma explicação - se alguém tiver, seria ótimo.
fonte
Muitas das respostas existentes presumem que você deseja definir isso para um projeto específico, mas eu precisei defini-lo para o próprio Eclipse a fim de oferecer suporte à autenticação integrada para o driver JDBC do SQL Server.
Para fazer isso, segui estas instruções para iniciar o Eclipse a partir da linha de comando Java em vez de seu inicializador normal. Então, apenas modifiquei esse script para adicionar meu argumento -Djava.library.path à linha de comando Java.
fonte
java.library.path
é inicializado com os valores das variáveis acima em sua plataforma correspondente.Isso deve funcionar em qualquer IDE.
Você pode testar se o valor é o que você espera chamando
java -XshowSettings:properties
fonte
No Windows, descobri que o importante é iniciar o Eclipse a partir da linha de comando em vez do Menu Iniciar ou de um atalho, desde que a DLL nativa esteja em um diretório em seu PATH. Aparentemente, isso garante que o diretório adequado esteja no caminho.
fonte