Comment ajouter la bibliothèque native à «java.library.path» avec le lancement d'Eclipse (au lieu de l'emporter)

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

Question

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

Mon problème est que mon autre bibliothèque (Pentaho Reporting) recherche des polices basées sur le 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 par défaut java.library.path au lieu de l'emporter (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 bien pour le déploiement)

Edit: Désolé pour les détails manquants; Je travaille avec Eclipse. (Le déploiement se fait avec JNLP et je peux utiliser nativelib en dessous de Ressources)

Était-ce utile?

La solution

J'avais oublié ce problème ... Je demandais en fait avec Eclipse, désolé de ne pas avoir dit cela à l'origine. Et la réponse semble être trop simple (au moins avec 3,5; probablement avec des versions plus anciennes aussi):

Arguments de la configuration Java Run: arguments VM:

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

Ne doit pas oublier les guillemets, sinon il y a des problèmes avec les espaces de chemin.

Autres conseils

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 de devoir ajouter des paramètres à votre configuration de lancement), vous pouvez fournir le chemin d'accès à l'emplacement des bibliothèques natives pour chaque pot dans le Chemin de construction java Dialogue sous Emplacement de la bibliothèque native. Notez que le nom du fichier de bibliothèque natif doit correspondre au nom du fichier JAR. Voir aussi ceci Description détaillée.

SWT met les DLL natives nécessaires dans un pot. Recherchez "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar" pour un exemple.

Les DLL doivent être à la racine du pot, le pot doit être signé et la DLL doit apparaître avec somme de contrôle dans le méta-inf / manifeste.mf pour que la machine virtuelle les ramasse.

Dans Windows, comme ceci:

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

% Path% est votre ancien -djava.library.path

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

Ainsi, il est (presque) impossible d'ajouter ou de représenter un autre dossier de bibliothèque à java.library.path lors du lancement de l'éclipse sans connaissance préalable du paramètre par défaut.

J'ai écrit presque, car il devrait être possible de laisser Eclipse Startup, de vider le contenu de java.library.path et d'arrêter Eclipse dans une commande. Le vidage serait analysé puis pris comme entrée pour le lancement de l'éclipse, 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}"

Pouvez-vous le contourner en appelant System.Load () programmatiquement pour charger votre bibliothèque native? Cette méthode (contrairement System.LoadLibrary ()) vous permet de spécifier un chemin absolu.

Dans Unix Systems, vous pouvez ajouter la variable d'environnement LD_LIBRARY_PATH. Sur Windows, le JVM définit automatiquement la propriété système, Java.Library.Path, sur PATH; Donc, si la DLL est sur votre chemin, vous êtes prêt.

Fenêtre-> Préférences-> Java-> JRES installé. Ensuite, choisissez votre JRE actuel (JDK) et cliquez sur Modifier. Remplissez les arguments VM par défaut: -djava.library.path = / usr / local / xuggler / lib. Fait!

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 vers celui séparé par ":".

Vous pouvez également utiliser $ {system_property: java.library.path} - Rob Elsner 22 novembre 10 à 23:01

Le nom du fichier de bibliothèque natif doit correspondre au nom du fichier JAR. C'est très très important. Veuillez vous assurer que le nom du pot et le nom de la DLL sont les mêmes. Veuillez également voir 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.dll, noter Extra 'D' dans le nom du fichier DLL. Je l'ai simplement renommé à jawin.dll et je l'ai confié en tant que bibliothèque native dans Eclipse comme mentionné dans le post "http://www.eclipsezone.com/eclipse/forums/t49342.html"

Pour une raison quelconque, je n'ai pas pu faire fonctionner plusieurs dossiers (enfin, cela l'a fait pendant un certain temps, mais dès que j'ai besoin de plus de DLL et a ajouté plus de dossiers, aucun avec des espaces blancs sur le chemin). J'ai ensuite copié toutes les DLL nécessaires à un dossier et j'avais cela comme mon java.library.path Et cela a fonctionné. Je n'ai pas d'explication - si quelqu'un le fait, ce serait génial.

Beaucoup des réponses existantes supposent que vous souhaitez 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 faire ça, j'ai suivi ces instructions pour le lancement d'éclipse à partir de la ligne de commande Java au lieu de son lanceur normal. Ensuite, je viens de modifier ce script pour ajouter mon argument -djava.library.path à la ligne de commande Java.

Sur Windows, j'ai trouvé que l'important est de Démarrer l'éclipse à partir de la ligne de commande Plutôt que dans le menu de démarrage ou un raccourci, à condition que la DLL native se trouve dans un répertoire sur votre chemin. Apparemment, cela garantit que le répertoire approprié est sur le chemin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top