Cómo agregar biblioteca nativa a "java.library.path" con el lanzamiento de Eclipse (en lugar de anularlo)

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

Pregunta

Tengo una biblioteca nativa que debe agregarse a java.library.path. Con argumento JVM -Djava.library.path = ruta ... Puedo establecer el camino como quiera.

Mi problema es que mi otra biblioteca (informes de Pentaho) busque fuentes basadas en el Java.library predeterminado. Path (incluidos los directorios del sistema, etc.) y la configuración manual anula la ruta predeterminada.

Entonces: como puedo agregar Una entrada de ruta a Java.library. (No me gustaría agregar la ruta predeterminada a mano, lo que no sería bueno en aras de la implementación)

Editar: Perdón por faltar detalles; Estoy trabajando con Eclipse. (La implementación se realiza con JNLP y allí puedo usar nativelib por debajo recursos)

¿Fue útil?

Solución

Había olvidado este problema ... en realidad estaba preguntando con Eclipse, perdón por no decir eso originalmente. Y la respuesta parece ser demasiado simple (al menos con 3.5; probablemente con versiones más antiguas también):

Argumentos de Configuración de Java Run: Argumentos de VM:

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

No debe olvidar las comillas, de lo contrario, hay problemas con los espacios en la ruta.

Otros consejos

Si desea agregar una biblioteca nativa sin interferir con java.library.path En el tiempo de desarrollo en Eclipse (para evitar incluir rutas absolutas y tener que agregar parámetros a su configuración de lanzamiento), puede suministrar la ruta a la ubicación de las bibliotecas nativas para cada jar en el frasco en el Ruta de construcción de Java diálogo bajo Ubicación de la biblioteca nativa. Tenga en cuenta que el nombre del archivo de la biblioteca nativo debe corresponder al nombre del archivo JAR. Ver también esto Descripción detallada.

SWT pone las DLL nativas necesarias en un frasco. Busque "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.Jar" para un ejemplo.

Las DLL deben estar en la raíz del frasco, el frasco debe estar firmado y la DLL debe aparecer con la suma de verificación en el metainf/manifest.mf para que la VM las recoja.

En Windows, como esta:

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

% Path% es su antiguo -djava.library.path

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 afirma que no hay mecánica de sustitución implementada en el lanzador de Eclipse, al menos no hay que lanzar Juno.

Por lo tanto, es (casi) imposible agregar o preparar otra carpeta de la biblioteca a java.library.path al iniciar Eclipse sin conocimiento previo de la configuración predeterminada.

Escribí casi, porque debería ser posible dejar que Eclipse Startup, descargue el contenido de java.library.path y detener eclipse en un solo comando. El volcado se analizaría y luego se tomaría como la entrada para lanzar Eclipse, es decir

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

¿Puedes dar la vuelta a esto llamando System.Load () ¿Programáticamente cargar su biblioteca nativa? Este método (a diferencia de System.LoadLibrary ()) le permite especificar una ruta absoluta.

En los sistemas UNIX, puede agregar a la variable de entorno LD_Library_Path. En Windows, el JVM establece automáticamente la propiedad del sistema, java.library.path, a la ruta; Entonces, si la DLL está en su camino, entonces está configurado.

Window-> Preferencias-> Java-> JRES instalado. Luego elija su JRE (JDK) actual y haga clic en Editar. Llene los argumentos VM predeterminados: -djava.library.path =/usr/local/xuggler/lib. ¡Hecho!

La solución ofrecida por Rob Elsner en uno de los comentarios anteriores funciona perfectamente (OSX 10.9, Eclipse Kepler). Uno tiene que agregar sus caminos adicionales a los separados por ":".

También puede usar $ {System_Property: java.library.path} - Rob Elsner 22 de noviembre de 10 a 23:01

El nombre del archivo de la biblioteca nativo debe corresponder al nombre del archivo JAR. Esto es muy, muy importante. Asegúrese de que el nombre del frasco y el nombre de DLL sean los mismos. Además, consulte la publicación de Fabian Steeg Mi descarga para Jawin contenía diferentes nombres para DLL y JAR. Era Jawin.jar y Jawind.dll, tenga en cuenta el nombre del archivo DLL extra 'D'. Simplemente lo cambié el nombre a jawin.dll y la configuré como una biblioteca nativa en Eclipse como se menciona en la publicación "http://www.eclipsezone.com/eclipse/forums/t49342.html"

Por alguna razón, no pude hacer que varias carpetas funcionen (bueno, lo hizo por un tiempo, pero tan pronto como necesitaba más DLL y agregué más carpetas, ninguna con espacios blancos en el camino). Luego copié todas las dlls necesarias a una carpeta y lo tuve como mi java.library.path Y funcionó. No tengo una explicación: si alguien lo hace, sería genial.

Muchas de las respuestas existentes suponen que desea establecer esto para un proyecto en particular, pero necesitaba configurarlo para Eclipse sí mismo Para admitir la autenticación integrada para el controlador JDBC SQL Server.

Para hacer esto, seguí estas instrucciones para lanzar Eclipse desde la línea de comandos de Java en lugar de su lanzador normal. Luego acabo de modificar ese script para agregar mi argumento -djava.library.path a la línea de comandos de Java.

En Windows, he descubierto que lo importante es Iniciar eclipse desde la línea de comando En lugar de desde el menú de inicio o un atajo, siempre que la DLL nativa esté en un directorio en su camino. Aparentemente, esto asegura que el directorio adecuado esté en el camino.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top