Подтвердить что ты не робот

Java.library.path устанавливается программно

Могу ли я установить java.library.path программно из самого Java-кода?

Не работает следующее.

    System.setProperty("java.library.path", "/blah");
4b9b3361

Ответ 1

Нет, вы не можете. Это свойство является значением только для чтения. Вы можете изменить его во время запуска JVM с помощью:

-Djava.library.path=your_path

Если вы хотите загрузить библиотеку из определенного места, вы можете вместо этого использовать System.load(libraryPath) с полным путем к библиотека.

Ответ 3

Я просто цитирую ссылку, предоставленную 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().

Ответ 4

Да, он будет читать переменные среды. Ниже приведен код для установки переменной среды с помощью 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 в

http://cropforge.org/plugins/scmsvn/viewcvs.php/IAPlugin/lib/ini4j-0.5.2-SNAPSHOT.jar?rev=656&root=icisjavatools&view=log

Ответ 5

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));
        }
    }
}