intellij - native lib hrtlib not found in java library path
Cómo agregar una biblioteca nativa a "java.library.path" con el lanzamiento de Eclipse(en lugar de anularlo) (13)
Obtuve una biblioteca nativa que debe agregarse a java.library.path . Con el argumento JVM -Djava.library.path = ruta ... Puedo establecer la ruta como yo quiera.
Mi problema es que mi otra biblioteca (informes pentaho) busca fuentes basadas en el java.library.path predeterminado (incluidos los directorios del sistema, etc.) y la configuración manual anula la ruta predeterminada.
Entonces, ¿cómo puedo agregar una entrada de ruta al java.library.path predeterminado en lugar de anularla (lo que parece hacerse con -Djava.library.path)? (No me gustaría agregar la ruta predeterminada a mano, lo que no sería bueno para el despliegue)
EDITAR: Perdón por los detalles perdidos; Estoy trabajando con Eclipse. (La implementación se realiza con JNLP y allí puedo usar nativelib en recursos )
¿Puede System.load() esto llamando a System.load() programáticamente para cargar su biblioteca nativa? Este método (a diferencia de System.loadLibrary() ) le permite especificar una ruta absoluta.
El nombre del archivo de la biblioteca nativa debe corresponderse con el nombre del archivo Jar. Esto es muy, muy importante. Asegúrese de que el nombre del jar y el nombre dll sean los mismos. Además, consulte la publicación de Fabian Steeg. Mi descarga de jawin contenía diferentes nombres para dll y jar. Era jawin.jar y jawin d .dll, nota extra ''d'' en el nombre del archivo dll. Simplemente lo renombré a jawin.dll y lo configuré como una biblioteca nativa en eclipse, como se menciona en la publicación " http://www.eclipsezone.com/eclipse/forums/t49342.html "
En Windows, así:
-Djava.library.path = "C: / MyLibPath;% PATH%"
% PATH% es tu antiguo -Djava.library.path
En Windows, he descubierto que lo importante es iniciar Eclipse desde la línea de comandos en lugar de hacerlo desde el Menú de Inicio o un acceso directo, siempre que la DLL nativa esté en un directorio de tu RUTA. Aparentemente, esto asegura que el directorio correcto está en la ruta.
En sistemas UNIX, puede agregar a la variable de entorno LD_LIBRARY_PATH. En Windows, JVM establece automáticamente la propiedad del sistema, java.library.path, en PATH; entonces, si el dll está en tu RUTA, entonces estás listo.
Había olvidado este problema ... En realidad estaba preguntando con Eclipse, lo siento por no haber dicho eso originalmente. Y la respuesta parece ser demasiado simple (al menos con 3.5, probablemente también con versiones anteriores):
Argumentos de la 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 PATH.
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 rutas adicionales a las separadas por ":".
También podría usar $ {property_system: java.library.path} - Rob Elsner, 22 de noviembre de 2010 a las 23:01
Muchas de las respuestas existentes asumen que desea configurar esto para un proyecto en particular, pero necesitaba configurarlo para el propio Eclipse para admitir la autenticación integrada para el controlador JDBC de SQL Server.
Para hacer esto, seguí estas instrucciones para iniciar Eclipse desde la línea de comandos de Java en lugar de su iniciador normal. Luego modifiqué esa secuencia de comandos para agregar mi argumento -Djava.library.path a la línea de comandos de Java.
Por alguna razón, no pude hacer que funcionaran varias carpetas (bueno, lo hice por un tiempo, pero tan pronto como necesité más dlls y agregué más carpetas, ninguna con espacios en blanco en la ruta). Luego copié todos los dlls necesarios en una carpeta y tuve como mi java.library.path y funcionó. No tengo una explicación, si alguien lo hace, sería genial.
SWT coloca las DLL nativas necesarias en un JAR. Busque "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" para ver un ejemplo.
Los archivos DLL deben estar en la raíz del JAR, el JAR debe estar firmado y el archivo DLL debe aparecer con suma de comprobación en META-INF / MANIFEST.MF para que la VM los recoja.
Si desea agregar una biblioteca nativa sin interferir con java.library.path
durante el desarrollo en Eclipse (para evitar incluir rutas absolutas y tener que agregar parámetros a la configuración de inicio), puede proporcionar la ruta a la ubicación de las bibliotecas nativas para cada Jar en el cuadro de diálogo Java Build Path debajo de la ubicación de la biblioteca nativa . Tenga en cuenta que el nombre del archivo de la biblioteca nativa debe corresponderse con el nombre del archivo Jar. Ver también esta descripción detallada .
Ventana-> Preferencias-> Java-> JRE instalados. A continuación, elija su JRE actual (JDK) y haga clic en Editar. Rellene los argumentos VM predeterminados: -Djava.library.path = / usr / local / xuggler / lib. ¡Hecho!
https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 afirma que no hay mecánicas de sustitución implementadas en el iniciador de Eclipse, al menos no hasta la liberación de Juno.
Por lo tanto, es (casi) imposible agregar o anteponer otra carpeta de biblioteca a java.library.path al iniciar Eclipse sin conocimiento previo de la configuración predeterminada.
Escribí casi, porque debería ser posible permitir el inicio de Eclipse, volcar el contenido de java.library.path y detener Eclipse en un solo comando. El volcado sería analizado y luego tomado como entrada para el lanzamiento de 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}"