Tengo una biblioteca nativa que debe agregarse a java.library.path . Con el argumento JVM -Djava.library.path = path ... Puedo establecer la ruta como quiera.
Mi problema es que mi otra biblioteca (informes de 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 anularlo (lo que parece hacerse con -Djava.library.path)? (No quisiera agregar la ruta predeterminada a mano, lo que no sería bueno por el bien de la implementación)
EDITAR: Lo siento por los detalles faltantes; Estoy trabajando con Eclipse. (La implementación se realiza con JNLP y allí puedo usar nativelib en recursos )
fuente
Respuestas:
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 configuración de ejecución de Java: argumentos de VM:
No debe olvidar las comillas, de lo contrario, hay problemas con los espacios en PATH.
fuente
Si desea agregar una biblioteca nativa sin interferir
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 proporcionar la ruta a la ubicación de las bibliotecas nativas para cada Jar en Java Build Cuadro de diálogo Ruta en Ubicación de biblioteca nativa . Tenga en cuenta que el nombre del archivo de la biblioteca nativa debe corresponder al nombre del archivo Jar. Consulte también esta descripción detallada .fuente
java.library.path
y regresé después de encontrar la solución en otro lugar. Editaré mi respuesta para que quede más claro.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 DLL deben estar en la raíz del JAR, el JAR debe estar firmado y el DLL debe aparecer con la suma de comprobación en META-INF / MANIFEST.MF para que la VM los recoja.
fuente
java.library.path
. ¿Sugieres que solo busque raízjar
?En Windows, así:
-Djava.library.path = "C: / MyLibPath;% PATH%"
% PATH% es su antiguo -Djava.library.path
fuente
¿Puede solucionar esto llamando a System.load () mediante programación para cargar su biblioteca nativa? Este método (a diferencia de System.loadLibrary () ) le permite especificar una ruta absoluta.
fuente
https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 establece que no hay mecanismos de sustitución implementados en el lanzador de Eclipse, al menos no hasta el lanzamiento de Juno.
Por lo tanto, es (casi) imposible agregar o anteponer otra carpeta de biblioteca a java.library.path al iniciar Eclipse sin el conocimiento previo de la configuración predeterminada.
Escribí casi, porque debería ser posible dejar que Eclipse se inicie, volcar el contenido de java.library.path y detener Eclipse en un comando. El volcado se analizaría y luego se tomaría como entrada para iniciar Eclipse, es decir
fuente
En sistemas UNIX, puede agregar a la variable de entorno LD_LIBRARY_PATH. En Windows, la JVM establece automáticamente la propiedad del sistema, java.library.path, en PATH; así que si el dll está en su RUTA, entonces está listo.
fuente
Ventana-> Preferencias-> Java-> JRE instalados. Luego elija su JRE actual (JDK) y haga clic en Editar. Complete los argumentos predeterminados de la máquina virtual: -Djava.library.path = / usr / local / xuggler / lib. ¡Hecho!
fuente
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 ":".
fuente
El nombre del archivo de la biblioteca nativa debe corresponder al nombre del archivo Jar. Esto es muy, muy importante. Asegúrese de que el nombre del jar y el nombre de la dll sean iguales. 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, tenga en cuenta una 'd' adicional 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 "
fuente
Por alguna razón, no pude hacer que varias carpetas funcionaran (bueno, lo hizo 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 archivos DLL necesarios en una carpeta y lo tenía como mi java.library.path y funcionó. No tengo una explicación; si alguien la tiene, sería genial.
fuente
Muchas de las respuestas existentes asumen que desea configurar esto para un proyecto en particular, pero necesitaba configurarlo para Eclipse en sí con el fin de apoyar 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 lanzador normal. Luego modifiqué ese script para agregar mi argumento -Djava.library.path a la línea de comandos de Java.
fuente
java.library.path
se inicia con los valores de las variables anteriores en su plataforma correspondiente.Esto debería funcionar en cualquier IDE.
Puede probar si el valor es el que espera llamando
java -XshowSettings:properties
fuente
En Windows, he descubierto que lo importante es iniciar Eclipse desde la línea de comandos en lugar de desde el menú Inicio o un acceso directo, siempre que la DLL nativa esté en un directorio en su PATH. Aparentemente, esto asegura que el directorio adecuado esté en la ruta.
fuente