Comment définir le java.library.path à partir d'Eclipse


209

Comment puis-je définir l'ensemble java.library.pathd'un projet Eclipse? J'utilise une bibliothèque Java qui repose sur des fichiers spécifiques au système d'exploitation et doit trouver un fichier .dll/ .so/ .jnilib. Mais l'application se ferme toujours avec un message d'erreur indiquant que ces fichiers ne se trouvent pas sur le chemin de la bibliothèque.

Je voudrais configurer tout ce projet pour utiliser le chemin de la bibliothèque. J'ai essayé d'ajouter le chemin en tant qu'argument VM à certaines configurations d'exécution dans eclipse, mais cela n'a pas fonctionné.


1
Je l'ai fait en l'ajoutant comme argument VM et cela a fonctionné. Comment l'avez-vous fait exactement?
Michael Myers

Réponses:


297

Ne jouez pas avec le chemin de la bibliothèque! Eclipse le construit lui-même!

Au lieu de cela, allez dans les paramètres de bibliothèque de vos projets et, pour chaque jar / etc qui nécessite une bibliothèque native, développez-le dans l' onglet Bibliothèques . Dans l'arborescence, chaque bibliothèque contient des éléments pour les emplacements source / javadoc et natifs de la bibliothèque.

Plus précisément: sélectionnez Project, faites un clic droit -> Propriétés / onglet Chemin de génération Java / Bibliothèques , sélectionnez un .jar, développez-le, sélectionnez l' emplacement de la bibliothèque native , cliquez sur Modifier , la boîte de dialogue de sélection de dossier apparaîtra)

Jouer avec le chemin de la bibliothèque sur la ligne de commande devrait être votre dernier effort, car vous pourriez casser quelque chose qui est déjà correctement défini par eclipse.

Emplacement de la bibliothèque native


6
Mais comment cela fonctionne-t-il si vous avez plusieurs dossiers à ajouter?
Dan

2
C'est une bonne question. Pourquoi avez-vous plus d'un dossier de bibliothèques natives pour un bocal? Je suis à peu près sûr qu'il existe un moyen d'intégrer les bibliothèques natives elles-mêmes dans le bocal, donc c'est peut-être la voie à suivre?
John Gardner

1
Je travaille sur un projet hérité sur lequel j'ai très peu de contrôle. Je ne peux certainement pas changer la structure du projet. Ma solution de contournement pour le moment est de tout mettre sur mon CHEMIN - mais ce n'est pas si agréable.
Dan

1
selon le système d'exploitation, vous pourriez créer un répertoire contenant tous les liens symboliques vers les autres bibliothèques? ou au moins à des fins de développement, vous pouvez copier toutes les bibliothèques dans un répertoire.
John Gardner

2
Je ne peux pas faire ce bâton. Je peux ajouter le chemin d'accès à la bibliothèque native, mais lorsque je clique sur OK pour revenir en arrière puis revenir à nouveau dans les propriétés du projet, il indique "Aucun". J'utilise eclipse Indigo SR2
bacar

37

Si vous l'ajoutez en tant qu'argument VM, assurez-vous de le préfixer avec -D:

-Djava.library.path=blahblahblah...

3
Voir cet article: stackoverflow.com/a/2309723/510583 . -Djava.library.path = "$ {workspace_loc: project} \ lib; $ {env_var: PATH}"
leo

23

À l'exception de la manière décrite dans la réponse approuvée, il existe une autre façon si vous avez des bibliothèques natives uniques dans votre projet.

  • dans les propriétés du projet-> Java Build Path-> Tab "Source" il y a une liste de vos dossiers source
  • Pour chaque entrée, il existe des "emplacements de bibliothèque natifs", qui prennent également en charge les chemins d'accès dans l'espace de travail.
  • Cela fera qu'Eclipse l'ajoutera à votre java.library.path.

2
impressionnant!!!! Merci beaucoup!!! qui a résolu mon problème. besoin d'ajouter du dylib à mon projet et un pot. définir l'emplacement de la bibliothèque native l'a corrigé!
ufk

11

Pour un lancement d'application donné, vous pouvez le faire comme le dit Jim.

Si vous souhaitez le définir pour l'ensemble de l'espace de travail, vous pouvez également le définir sous

Window->
  Preferences->
    Java->
      Installed JREs

Chaque JRE a un "arguments VM par défaut" (qui, je crois, sont complètement ignorés si des arguments VM sont définis pour une configuration d'exécution.)

Vous pouvez même configurer différents JRE / JDK avec différents paramètres et avoir certains projets en utiliser un, d'autres projets en utiliser un autre.


8

Vous pouvez simplement ajouter -Djava.library.path=yourPathà la eclipse.ini.


6

Ajoutez simplement les *.dllfichiers à votrec:/windows

Vous pouvez obtenir le java.library.path à partir des codes suivants: puis ajouter vos fichiers dll sous n'importe quel chemin d'accès

import java.util.logging.Logger;

public class Test {


    static Logger logger = Logger.getLogger(Test.class.getName());
    public static void main(String[] args) {
    logger.info(System.getProperty("java.library.path"));
    }
}

Cela signifierait que tous ceux qui utilisent votre projet devraient également les y mettre.
xtofl

Merci pour cela. L'idée de mettre les DLL dans c:/windowsm'a prouvé que c'était juste un problème de chemin et non un problème avec les DLL.
vegemite4me

5

Aucune des solutions ci-dessus n'a fonctionné pour moi (Eclipse Juno avec JDK 1.7_015). Java n'a pu trouver les bibliothèques que lorsque je les ai déplacées de project_folder / lib vers project_folder.


Quoi? Pourquoi cela devrait-il être important ..? O_o
Campa

5

Je pense qu'il y a une autre raison de vouloir se fixer java.library.path. Subversion est livré avec de nombreuses bibliothèques et Eclipse ne les verra que si elles java.library.pathpeuvent être ajoutées. Par exemple, je suis sur OS-X, donc les bibliothèques sont sous \opt\subversion\lib. Il y en a beaucoup et j'aimerais les garder où ils sont (pas les copier dans un répertoire lib standard).

Les paramètres du projet ne résoudront pas cela.


alors, où dois-je ajouter les paramètres java.library.path?
eLRuLL

4

Cliquez sur Exécuter
Cliquez sur Déboguer ...
Nouvelle application Java
Cliquez sur l'onglet Arguments
dans la deuxième zone (Arguments VM) ajoutez l'entrée -D

-Xdebug -verbose:gc -Xbootclasspath/p:jar/vbjorb.jar;jar/oracle9.jar;classes;jar/mq.jar;jar/xml4j.jar -classpath -DORBInitRef=NameService=iioploc://10.101.2.94:8092/NameService  

etc...


1
Aussi - dans la configuration d'exécution, allez dans l'onglet "Commun" et choisissez un emplacement dans votre projet pour enregistrer la configuration d'exécution. Cela vous permet d'archiver cette configuration d'exécution (fichier xxxx.launch) afin que les autres membres de votre équipe puissent la réutiliser.
Scott Stanchfield

3

Une autre solution serait d'ouvrir la «configuration de l'exécution» puis dans l'onglet «Environnement», définissez le couple {Path, Value}.

Par exemple, pour ajouter un répertoire 'lib' situé à la racine du projet,

    Path  <-  ${workspace_loc:name_of_the_project}\lib

Mais peut-être directement l'argument VM -Djava.library.pathdans l' onglet Arguments ?
Campa


1

J'utilise Mac OS X Yosemite et Netbeans 8.02, j'ai la même erreur et la solution simple que j'ai trouvée est comme ci-dessus, ceci est utile lorsque vous devez inclure une bibliothèque native dans le projet. Faites de même pour Netbeans:

1.- Right click on the Project
2.- Properties
3.- Click on RUN
4.- VM Options: java -Djava.library.path="your_path"
5.- for example in my case: java -Djava.library.path=</Users/Lexynux/NetBeansProjects/NAO/libs>
6.- Ok

J'espère que cela pourrait être utile pour quelqu'un. Le lien où j'ai trouvé la solution est ici: java.library.path - Qu'est-ce que c'est et comment utiliser


0

Parfois, nous n'obtenons pas le chemin de génération Java en cliquant directement avec le bouton droit sur le projet. puis allez dans les propriétés ....Faites un clic droit et accédez aux propriétés

Cliquez ensuite sur le chemin de génération JavaPropriétés Scrren

Cliquez sur ajouter un pot externe

Cliquez sur l'onglet ajouter des pots externes et donnez le chemin de votre fichier informatique où vous avez stocké des pots.


0

Voici un autre correctif:

Mon système de génération (Gradle) a ajouté une bibliothèque native requise (dll) au chemin de génération Eclipse (clic droit sur Projet -> Propriétés -> Chemin de génération Java -> Bibliothèques). Dire au système de génération de ne pas ajouter la bibliothèque de DLL native au chemin de classe Eclipse a résolu le problème.


0

Vous pouvez ajouter l'argument vm dans votre Eclipse.

Exemple :

-Djava.ext.dirs=cots_lib

où se cots_libtrouve votre bibliothèque de dossiers externes.


-1

la manière la plus simple serait d'utiliser l'IDE Eclipse lui-même. Allez dans le menu et définissez le chemin de génération. Faites-le pointer vers le chemin du fichier JAVA JDK et JRE dans votre répertoire. ensuite, vous pouvez vérifier le chemin de construction où les fichiers compilés vont être définis. dans le dossier bin par défaut cependant. La meilleure chose serait de permettre à eclipse de gérer lui-même le chemin de génération et de ne le modifier que pour la solution donnée ci-dessus

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.