Библиотеки не имеют (не могут?) правильно обращаться к переменным среды/PATH [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Библиотеки не имеют (не могут?) правильно обращаться к переменным среды/PATH [закрыто]

Сообщение Anonymous »

Недавно я получил новый компьютер с Win 11 и две библиотеки, которые отлично работали на моем компьютере с Win 10, теперь больше не работают, хотя я установил их так же, как и на Win 10. Переменные среды (системные, а не пользовательские) также установлены таким же образом, и все же я продолжаю получать исключения, которые выглядят так, будто мои IDE не получают автоматический доступ и не ищут новые переменные среды и/или PATH. Код, использующий библиотеки, которым не требуется переменная среды или PATH (разумеется, за исключением Java), работает нормально!
Здесь перечислено все, включая папки библиотек:

Код: Выделить всё

ProcessBuilder builder = new ProcessBuilder();
Map env = builder.environment();
String path = env.get("Path");
String[] split = path.split(";");
System.out.println("Path:\n"+String.join(System.lineSeparator(), split));
Это тоже работает:

Код: Выделить всё

String envvar = System.getenv("SOME_LIBRARY_BIN");
Самое странное то, что somelibrary.getVersion(); выдает исключение, но если я вызываю somelibrary --version из командной строки, то оно работает, даже если я не запускаю cmd от имени администратора.
На данный момент я протестировал две версии Eclipse (2020-06 Enterprise и 2025-09 Enterprise) и IntelliJ IDEA (последний=2025.3.2), все они с новыми проектами и с Java 8 - мне приходится использовать Java 8 с этими библиотеками (думаю, это даже та же версия, которую я запускал на Win 10). IDE и мой компьютер уже перезапускались много раз.
Друг протестировал мой код в JDeveloper (также Java 8), и, по крайней мере, первая библиотека не выдала никаких исключений (вторую не тестировал). Оба компьютера работают под управлением Win 11 Pro версии 25H2 (одна и та же сборка).
Похоже, это может быть вызвано настройкой Win 11, но что может ограничить доступ к таким переменным среды/PATH, по крайней мере, когда к ним пытается получить доступ внешняя библиотека?
Изменить:
Это библиотека GDAL. Однако я думаю, что это проблема с переменными среды и доступом, а не с самой библиотекой, поэтому я разместил здесь, а не на stackoverflow ГИС. Пару месяцев назад я даже написал руководство по установке этой библиотеки (ссылка), это то, что работало на моем старом ПК с Win 10 и то, что также работало на ПК с Win 11 моего друга, но по какой-то причине оно не работает на моем новом ПК с Win 11, хотя он настроен точно так же. Я даже сравнил переменные среды между двумя моими компьютерами, но не заметил ничего, что могло бы вызвать это.
Сначала я тестировал его с одной и той же версией библиотеки, но с тех пор я попробовал еще две (включая последнюю), и каждый раз одно и то же.
Процесс (после установки) прост: добавьте .jar в папку проекта, добавьте его в путь сборки Java, импортируйте org.gdal.gdal.gdal; и вызовите gdal.AllRegister();. Да, все, эта строка — первое, что вам нужно вызвать, чтобы использовать остальную часть библиотеки. Если вы этого не сделаете и позвоните, например. gdal.VersionInfo() напрямую, то он должен выдать ошибку «драйвер не зарегистрирован», но независимо от того, что я вызываю, я всегда получаю одно и то же исключение:

Код: Выделить всё

Native library load failed.
java.lang.UnsatisfiedLinkError: C:\Program Files\GDAL\gdalalljni.dll: The specified procedure could not be found
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.gdal.gdal.gdalJNI.AllRegister()V
at org.gdal.gdal.gdalJNI.AllRegister(Native Method)
at org.gdal.gdal.gdal.AllRegister(gdal.java:776)
at Main.main(Main.java:39)
Я знаю, что это означает, что он не может найти .dll. Но она определенно находится прямо в папке установки, которая также задана в PATH.
Я потратил часы на поиск ошибки и перепробовал все предложения, применимые к Windows, но обычно это люди, использующие другие программы, использующие GDAL, поэтому информации не так много, кроме добавления -Djava.library.path="C:\Program Files\GDAL;${env_var:PATH}" в качестве аргумента виртуальной машины. и, возможно, обновление распространяемого пакета Microsoft C++ (я установил версию v14, которая была последней версией iirc, уже есть версии 2010, 2012, 2013 и 2015-2022 x86), оба из которых не помогли. Я также просто пытался установить «местоположение собственной библиотеки» .jar по тому же пути, но и с этим не повезло.
У меня раньше была аналогичная проблема с другой библиотекой (действительно, мне пришлось покопаться в моих проектах, чтобы найти ее снова): код, который работал в Win 10, не работал в Win 11, хотя они были настроены одинаково.

Подробнее здесь: https://stackoverflow.com/questions/798 ... h-properly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»