Здесь перечислено все, включая папки библиотек:
Код: Выделить всё
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");
На данный момент я протестировал две версии 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)
Я потратил часы на поиск ошибки и перепробовал все предложения, применимые к 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
Мобильная версия