web-dev-qa-db-fra.com

Comment ajouter une bibliothèque native à "Java.library.path" avec le lancement d'Eclipse (au lieu de le remplacer)

J'ai une bibliothèque native qui doit être ajoutée à Java.library.path . Avec l'argument JVM - Djava.library.path = chemin ... Je peux définir le chemin comme je le souhaite.

Mon problème est que mon autre bibliothèque (pentaho reporting) recherche les polices en fonction du fichier par défaut Java.library.path (y compris les répertoires système, etc.) et le paramètre manuel remplace le chemin par défaut.

Alors, comment puis-je ajouter une entrée de chemin vers le fichier par défaut Java.library.path au lieu de le remplacer (ce qui semble être fait avec -Djava.library.path)? (Je ne voudrais pas ajouter le chemin par défaut à la main, ce qui ne serait pas agréable pour le déploiement)

EDIT: Désolé pour les détails manquants; Je travaille avec Eclipse. (Le déploiement est fait avec JNLP et là je peux utiliser nativelib sous des ressources )

89
Touko

J'avais oublié cette question ... Je demandais en fait à Eclipse, désolé de ne pas l'avoir dit à l'origine. Et la réponse semble être trop simple (du moins avec la version 3.5; probablement aussi avec les anciennes versions):

Arguments de la configuration d'exécution Java: VM arguments:

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

N'oubliez pas les guillemets, sinon il y a des problèmes d'espaces dans PATH.

46
Touko

Si vous souhaitez ajouter une bibliothèque native sans interférer avec Java.library.path au moment du développement dans Eclipse (pour éviter d’inclure des chemins absolus et d’avoir à ajouter des paramètres à votre configuration de lancement), vous pouvez indiquer le chemin d’accès à l’emplacement des bibliothèques natives pour chaque fichier Jar de Java Build. Chemin d'accès dialogue sous Emplacement de la bibliothèque native . Notez que le nom de fichier de la bibliothèque native doit correspondre au nom du fichier Jar. Voir aussi ceci description détaillée .

14
Fabian Steeg

SWT place les DLL natives nécessaires dans un fichier JAR. Recherchez "org.Eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" pour obtenir un exemple.

Les DLL doivent être à la racine du fichier JAR, le fichier JAR doit être signé et le DLL doit apparaître avec la somme de contrôle dans le fichier META-INF/MANIFEST.MF pour le fichier VM pour les récupérer.

9
Aaron Digulla

Sous Windows, comme ceci:

-Djava.library.path = "C:/MyLibPath;% PATH%"

% PATH% est votre ancien -Djava.library.path

3
andy boot

https://bugs.Eclipse.org/bugs/show_bug.cgi?id=102239 indique qu'il n'y a pas de mécanismes de substitution implémentés dans le lanceur d'Eclipse, du moins pas jusqu'à la publication de Juno.

Il est donc (presque) impossible d’ajouter ou d’ajouter un autre dossier de bibliothèque à Java.library.path lors du lancement d’Eclipse sans connaissance préalable du paramètre par défaut.

J'ai écrit presque, car il devrait être possible de laisser le démarrage d'Eclipse, vider le contenu de Java.library.path et arrêter Eclipse en une seule commande. Le dump serait ensuite analysé, puis utilisé comme entrée pour le lancement d’Eclipse, c’est-à-dire.

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

Sous UNIX, vous pouvez ajouter à la variable d’environnement LD_LIBRARY_PATH. Sous Windows, la machine virtuelle Java définit automatiquement la propriété système, Java.library.path, sur PATH. donc si la dll est sur votre PATH, alors vous êtes prêt.

1
geowa4

La solution proposée par Rob Elsner dans l’un des commentaires ci-dessus fonctionne parfaitement (OSX 10.9, Eclipse Kepler). Il faut ajouter leurs chemins supplémentaires à ceux séparés par ":".

Vous pouvez aussi utiliser $ {system_property: Java.library.path} - Rob Elsner le 22 Novembre '10 à 23:01

1
Johan

Fenêtre-> Préférences-> Java-> JRE installés. Ensuite, choisissez votre JRE actuel (JDK) et cliquez sur Modifier. Fill Default VM Arguments: -Djava.library.path =/usr/local/xuggler/lib. Fait!!

1
Vadym

Pouvez-vous résoudre ce problème en appelant System.load () par programme pour charger votre bibliothèque native? Cette méthode (contrairement à System.loadLibrary () ) vous permet de spécifier un chemin absolu.

1
Simon Nickerson

Pour une raison quelconque, je ne pouvais pas faire fonctionner plusieurs dossiers (enfin, cela a duré un certain temps, mais dès que j'ai eu besoin de plus de dll et que j'ai ajouté plus de dossiers, aucun avec des espaces dans le chemin). J'ai ensuite copié toutes les dll nécessaires dans un dossier et je l'avais comme Java.library.path et tout fonctionnait. Je n'ai pas d'explication - si quelqu'un le savait, ce serait génial.

0
Ustaman Sangat

Le nom de fichier de la bibliothèque native doit correspondre au nom du fichier Jar. C'est très très important. Assurez-vous que les noms de jar et dll sont identiques. Voir aussi le message de Fabian Steeg. Mon téléchargement pour jawin contenait différents noms pour dll et jar. C'était jawin.jar et jawin d . Dll, notez un 'd' supplémentaire dans le nom du fichier dll. Je l'ai simplement renommé jawin.dll et l'ai défini comme une bibliothèque native dans Eclipse, comme indiqué dans l'article " http://www.eclipsezone.com/Eclipse/forums/t49342.html "

0
Dhana

La plupart des réponses existantes supposent que vous souhaitiez définir ceci pour un projet particulier, mais je devais le définir pour Eclipse lui-même afin de prendre en charge l'authentification intégrée pour le pilote JDBC SQL Server.

Pour ce faire, j'ai suivi ces instructions pour le lancement d'Eclipse à partir de la ligne de commande Java au lieu de son programme de lancement normal. Ensuite, je viens de modifier ce script pour ajouter mon -Djava.library. Argument .path de la ligne de commande Java.

0
CrazyPyro