Могу ли я установить java.library.path программно из самого Java-кода?
Не работает следующее.
System.setProperty("java.library.path", "/blah");
Могу ли я установить java.library.path программно из самого Java-кода?
Не работает следующее.
System.setProperty("java.library.path", "/blah");
Нет, вы не можете. Это свойство является значением только для чтения. Вы можете изменить его во время запуска JVM с помощью:
-Djava.library.path=your_path
Если вы хотите загрузить библиотеку из определенного места, вы можете вместо этого использовать System.load(libraryPath) с полным путем к библиотека.
Может быть, это поможет: установка "java.library.path" программно
Я просто цитирую ссылку, предоставленную secmask (https://cedarsoft.com/blog.html), на случай, если ссылка не работает:
Изменение системного свойства
java.library.path
позже не имеет любой эффект, так как свойство оценивается очень рано и кэшируется. Но ребята из jdic нашли способ обойти это. Это немного грязно - но эй, эти хаки - причина, по которой мы все любим Ява.
System.setProperty("java.library.path", "/path/to/libs");
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
Explanation:
Сначала системное свойство обновляется новым значением. Это может быть относительный путь - или, может быть, вы хотите создать этот путь динамически. Classloader имеет статическое поле (
sys_paths
), которое содержит пути. Если для этого поля установлено значениеnull
, оно инициализируется автоматически. Поэтому, если задать для этого поля значениеnull
, переоценка пути к библиотеке будет выполнена, как только будет вызванloadLibrary()
.
Да, он будет читать переменные среды. Ниже приведен код для установки переменной среды с помощью ini4j.
import java.io.IOException;
import org.ini4j.Reg;
public class SettingWinEnvironmentUsing_ini4j {
public static void main(String args[])
{
System.out.println("Setting System Environment Variables");
Reg reg = new Reg();
Reg.Key env = reg.add("HKEY_CURRENT_USER\\Environment");
env.put("RR_PROPERTY_PATH", "c:\\path");
try {
reg.write();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(env.get("RR_PROPERTY_PATH"));
}
}
Вы можете найти банку ini4j в
import java.util.Map;
public class ReadingEnvironment {
public static void main(String[] args) {
System.out.println("Reading System Environment Variables:\n");
// System.out.println(System.getenv());
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n", envName, env.get(envName));
}
}
}