Como adicionar biblioteca nativa ao "java.library.path" com o lançamento do Eclipse (em vez de substituí -lo)

StackOverflow https://stackoverflow.com/questions/661320

Pergunta

Eu tenho uma biblioteca nativa que precisa ser adicionada a java.library.path. Com argumento da JVM -Djava.library.Path = Path ... Eu posso definir o caminho como eu quiser.

Meu problema é que minha outra biblioteca (Pentaho Reporting) pesquisa fontes com base no java.library.Path padrão (incluindo diretórios do sistema etc.) e a configuração manual substitui o caminho padrão.

Então: como posso adicionar Uma entrada de caminho para o java.library.Path padrão em vez de substituí -lo (que parece ser feito com -djava.library.path)? (Eu não gostaria de adicionar o caminho padrão à mão, o que não seria bom por causa da implantação)

EDIT: Desculpe pelos detalhes ausentes; Estou trabalhando com o Eclipse. (A implantação é feita com o JNLP e lá posso usar nativeLib debaixo Recursos)

Foi útil?

Solução

Esqueci esse problema ... eu estava realmente perguntando com Eclipse, desculpe por não declarar isso originalmente. E a resposta parece ser muito simples (pelo menos com 3,5; provavelmente com versões mais antigas também):

Argumentos do Java Run Run Configuration: VM Argumentos:

-Djava.library.path="${workspace_loc:project}\lib;${env_var:PATH}"

Não deve esquecer as aspas, caso contrário, existem problemas com os espaços no caminho.

Outras dicas

Se você deseja adicionar uma biblioteca nativa sem interferir java.library.path No momento do desenvolvimento do Eclipse (para evitar a inclusão de caminhos absolutos e ter que adicionar parâmetros à sua configuração de lançamento), você pode fornecer o caminho para o local da biblioteca nativa para cada jar no Java Build Path diálogo abaixo Localização da biblioteca nativa. Observe que o nome do arquivo da biblioteca nativa deve corresponder ao nome do arquivo JAR. Veja também isso descrição detalhada.

O SWT coloca as DLLs nativas necessárias em uma jarra. Pesquise "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" por exemplo.

As DLLs devem estar na raiz da jarra, o frasco deve ser assinado e a DLL deve aparecer com a soma de verificação no meta-inf/manifest.mf para a VM buscá-los.

Nas janelas, assim:

-Djava.library.path = "c:/mylibpath;%path%"

% Path% é o seu antigo -djava.library.path

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 afirma que não há mecânica de substituição implementada no lançador do Eclipse, pelo menos nenhum para lançar Juno.

Assim, é (quase) impossível anexar ou prender outra pasta da biblioteca ao java.library.Path ao iniciar o Eclipse sem o conhecimento prévio da configuração padrão.

Eu escrevi quase, porque deveria ser possível deixar o Eclipse Startup, despejar o conteúdo de java.library.path e parar o eclipse em um comando. O despejo seria analisado e depois tomado como entrada para o lançamento do eclipse, ou seja,

#!/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}"

Você pode pegar isso ligando System.load () programaticamente para carregar sua biblioteca nativa? Este método (diferentemente System.LoadLibrary ()) permite especificar um caminho absoluto.

Nos sistemas UNIX, você pode anexar à variável de ambiente LD_LIBRARY_PATH. No Windows, a JVM define automaticamente a propriedade System, java.library.path, para Path; Portanto, se a DLL estiver no seu caminho, você estará definido.

Janela-> preferências-> java-> jres instalado. Em seguida, escolha seu JRE atual (JDK) e clique em Editar. Preencha os argumentos da VM padrão: -djava.library.path =/usr/local/xuggler/lib. Feito!

A solução oferecida por Rob Elsner em um dos comentários acima funciona perfeitamente (OSX 10.9, Eclipse Kepler). É preciso anexar seus caminhos adicionais ao separado por ":".

Você também pode usar $ {System_property: java.library.path} - Rob Elsner 22 de novembro de 10 às 23:01

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 sejam iguais. Além disso, consulte o post de Fabian Steeg My Download para Jawin estava contendo nomes diferentes para DLL e JAR. Era Jawin.jar e Jawind.dll, observe 'd' extra no nome do arquivo dll. Eu simplesmente o renomeei para Jawin.dll e o defina como uma biblioteca nativa no Eclipse, como mencionado no Post "http://www.eclipsezone.com/eclipse/forums/t49342.html"

Por alguma razão, não consegui fazer com que várias pastas funcionem (bem, funcionou por um tempo, mas assim que eu precisava de mais DLLs e adicionar mais pastas, nenhuma com espaços brancos no caminho). Eu então 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 o fizer, seria ótimo.

Muitas das respostas existentes assumem que você deseja definir isso para um projeto específico, mas eu precisava defini -lo para o Eclipse em si Para oferecer suporte à autenticação integrada para o driver SQL Server JDBC.

Para fazer isso, eu segui estas instruções Para o lançamento do Eclipse a partir da linha de comando Java em vez de seu lançador normal. Então eu apenas modifiquei esse script para adicionar meu argumento -djava.library.path ao Java CommandLine.

No Windows, descobri que o importante é Comece o eclipse da linha de comando Em vez de no menu Iniciar ou em um atalho, desde que a DLL nativa esteja em um diretório em seu caminho. Aparentemente, isso garante que o diretório adequado esteja no caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top