Ответ 1
Это не совсем необоснованный вопрос, но нет хорошего ответа, поэтому для потомков я попытаюсь объяснить, почему вы застряли, и почему это не сработает.
-
java.library.path
не может быть установлен из переменной среды вообще. Вы можете указать, к чему вы хотите, с-Djava.library.path=
. Скорее всего, это то, что вы действительно хотите сделать в любом случае. Вот почему существует опция. -
Оказывается (по крайней мере на окнах), что переменная среды, которую вы ищете, не просто используется без проблем. Попробуйте этот код.
package com.stackoverflow; import java.util.Map; public class LibPathFinder { public static void main(String[] args) { String javaLibPath = System.getProperty("java.library.path"); Map<String, String> envVars = System.getenv(); System.out.println(envVars.get("Path")); System.out.println(javaLibPath); for (String var : envVars.keySet()) { System.err.println("examining " + var); if (envVars.get(var).equals(javaLibPath)) { System.out.println(var); } } } }
Вы заметите, что при запуске первые две вещи, которые он печатает, различны. Если Java использует
PATH
Windows, она сначала начинает вычислять значение. Я бросил расследование, что происходит. Дело в том, что не было переменной среды, которая точно соответствовалаjava.library.path
. Я не пытался использовать Linux или OSX, ваш пробег может варьироваться -
Это действительно не очень приятно связываться с такими переменными среды, как это. Они используются для всей оболочки, поэтому вы обязываете своих пользователей иметь свою общую библиотеку в своей среде, но только иногда. Единственной реальной причиной изменения
java.library.path
является добавление собственных библиотек. Если вы используете родные библиотеки, то у вас уже есть код, специфичный для ОС (его нужно скомпилировать для платформы, верно?), Так что вы действительно уже отказались от борьбы за "отсутствие конкретных случаев для конкретной платформы". Лучше всего поместить вашу родную библиотеку в место, где системный путь (независимо от того, что может быть) уже найдет его, или добавить к нему свой путь к библиотеке с помощью какого-либо установщика. Если вы не хотите делать что-либо из этого, я бы предложил использовать вариацию кода @malat, распечатав настоящийjava.library.path
, а затем добавив путь к этому результату в ваш скрипт, а затем воспользуемся-D
чтобы установить его для реального запуска программы.