Est -Djava.de la bibliothèque.path=... équivalent au Système.setProperty(“java.de la bibliothèque.chemin d'accès”, ...)
Je charge une bibliothèque externe qui est placé dans ./lib
. Ce sont ces deux solutions pour régler le java.de la bibliothèque.chemin d'accès équivalent?
-
Définir le chemin d'accès dans la console lors de l'exécution de pot:
java -Djava.library.path=./lib -jar myApplication.jar
-
Définir le chemin d'accès dans le code avant le chargement de la bibliothèque:
System.setProperty("java.library.path", "./lib");
Si ils sont équivalentes, pourquoi dans la deuxième solution Java peut pas trouver la bibliothèque, tandis que le premier est ok?
Si pas, est-il un moyen de fixer le chemin d'accès dans le code?
java.library.path
se réfère au répertoire un fichier
Vous devez vous connecter pour publier un commentaire.
Généralement parlant, les deux méthodes ont le même effet net en ce que le système de propriété
java.library.path
est définie à la valeur./lib
.Cependant, certaines propriétés du système sont évalués uniquement à des points précis dans le temps, telles que le démarrage de la JVM. Si
java.library.path
est parmi ces propriétés (et de votre expérience semble indiquer qu'), puis en utilisant la deuxième méthode n'aura pas d'effet notable, sauf pour le retour de la nouvelle valeur sur les futurs appels degetProperty()
.En règle générale, à l'aide de la
-D
propriété de ligne de commande fonctionne sur toutes les propriétés du système, tandis queSystem.setProperty()
ne fonctionne que sur des propriétés qui ne sont pas seulement vérifié lors du démarrage.Bien qu'il n'est pas bien documentée, l'
java.library.path
système de la propriété est une "lecture seule" propriété jusqu'auSystem.loadLibrary()
méthode est concerné. C'est un rapport de bogue mais il a été fermé par le Soleil, par opposition à fixe. Le problème est que la JVM du chargeur de classe qui lit cette propriété une fois au démarrage et puis il la met en cache, ne nous permet pas de le changer par programmation par la suite. La ligneSystem.setProperty("java.library.path", anyVal);
n'aura aucun effet, sauf pourSystem.getProperty()
les appels de méthode.Heureusement, quelqu'un posté une solution de contournement sur le Soleil forums. Malheureusement, le lien ne fonctionne plus, mais je n'ai trouver le code sur une autre source. Voici le code que vous pouvez utiliser pour travailler autour de ne pas être en mesure de définir la
java.library.path
système de la propriété:AVERTISSEMENT: Cela peut ne pas fonctionner sur toutes les plates-formes et/ou de la Jvm.
vous pouvez ajouter trois lignes
et également importer java.lang.de réfléchir.Champ
C'est ok pour résoudre le problème