You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Geotools OGR插件UnsatisfiedLinkError问题:缺失ogrjni或gdalalljni

Geotools OGR插件GDAL配置失败问题

问题描述

使用Geotools的OGR插件时,无法正确配置GDAL。根据官方文档要求,需使用GDAL 3.2或更低版本,但使用第三方提供的GDAL二进制包时遇到以下矛盾问题:

  • 采用GDAL 2.2.3版本:触发gdalalljni的UnsatisfiedLinkError,确认该版本确实缺失gdalalljni.dll文件
  • 采用GDAL 3.1.4版本:触发ogrjni的UnsatisfiedLinkError,该版本同样缺失ogrjni.dll文件

可见2.2.3版本缺少gdalalljni.dll,后续版本虽补上该文件却移除了ogrjni.dll,导致两种版本都无法满足Geotools OGR插件的依赖要求。

3.1.4版本堆栈跟踪示例

Native library load failed.
java.lang.UnsatisfiedLinkError: no ogrjni in java.library.path: [C:\Program Files\Java\jdk-11\bin, C:\WINDOWS\Sun\Java\bin, C:\WINDOWS\system32, C:\WINDOWS, C:\Program Files\Microsoft SDKs\Azure\CLI2\wbin, C:\Program Files (x86)\Common Files\Oracle\Java\javapath, C:\WINDOWS\system32, C:\WINDOWS, C:\WINDOWS\System32\Wbem, C:\WINDOWS\System32\WindowsPowerShell\v1.0\, C:\WINDOWS\System32\OpenSSH\, C:\Program Files\dotnet\, C:\Program Files\nodejs\, C:\Program Files\Microsoft SQL Server\150\Tools\Binn\, C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\, C:\Program Files\PowerShell\7\, C:\Program Files\PuTTY\, C:\Program Files\RedHat\Podman\, C:\gdal-314\bin\gdal\java, C:\gdal-314\bin, C:\gdal-314\bin\gdal\apps, C:\aliases, C:\Users\sehe\AppData\Local\Programs\Git\cmd, C:\Users\sehe\AppData\Local\Programs\oh-my-posh\bin, C:\Users\sehe\AppData\Roaming\pypoetry\venv\Scripts, C:\Users\sehe\AppData\Local\Programs\Microsoft VS Code\bin, C:\Users\sehe\AppData\Roaming\npm, C:\Program Files\Azure Data Studio\bin, C:\Users\sehe\AppData\Local\Microsoft\WindowsApps, C:\Users\sehe\AppData\Local\Programs\EmEditor, C:\Users\sehe\AppData\Local\Pandoc\, C:\Users\sehe\AppData\Local\Programs\Gpg4win\..\GnuPG\bin, C:\Users\sehe\AppData\Roaming\Programs\Zero Install, C:\Users\sehe\.dotnet\tools, C:\grails-4.1.4\bin, ., .]
Caught: java.lang.UnsatisfiedLinkError: org.gdal.ogr.ogrJNI.GetDriverCount()I
java.lang.UnsatisfiedLinkError: org.gdal.ogr.ogrJNI.GetDriverCount()I
    at org.gdal.ogr.ogrJNI.GetDriverCount(Native Method)
    at org.gdal.ogr.ogr.GetDriverCount(ogr.java:114)
    at org.geotools.data.ogr.jni.JniOGR.<clinit>(JniOGR.java:88)
    at org.geotools.data.ogr.jni.JniOGRDataStoreFactory.createOGR(JniOGRDataStoreFactory.java:32)
    at org.geotools.data.ogr.OGRDataStoreFactory.getAvailableDrivers(OGRDataStoreFactory.java:285)
    at GeotoolsTest.run(GeotoolsTest.groovy:12)

测试代码(Groovy)

import org.geotools.data.ogr.OGRDataStoreFactory
import org.geotools.data.ogr.jni.JniOGRDataStoreFactory

OGRDataStoreFactory factory = new JniOGRDataStoreFactory()
for (String driver : factory.getAvailableDrivers()) {
    System.out.println(driver);
}

Gradle构建文件

plugins {
    id 'groovy'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
    maven { url "https://repo.osgeo.org/repository/geotools-releases/" }
    maven { url "https://packages.atlassian.com/maven-3rdparty/" }
}

dependencies {
    implementation 'org.apache.groovy:groovy-all:4.0.14'

    implementation group: 'org.geotools', name: 'gt-main', version: '32.1'
    implementation group: 'org.geotools', name: 'gt-ogr-core', version: '32.1'
    implementation group: 'org.geotools', name: 'gt-ogr-jni', version: '32.1'
}

test {
    useJUnitPlatform()
}

configurations.all {

    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if (details.requested.group == 'javax.media') {
            if (details.requested.name == 'jai_core') {
                details.useTarget group: 'javax.media', name: 'jai-core', version: details.requested.version
            }
        }
    }
}

当前环境变量配置

  • GDAL_SDK_ROOT = C:\gdal-314
  • GDAL_DATA = %GDAL_SDK_ROOT%\bin\gdal-data
  • PATH = %GDAL_SDK_ROOT%\bin\gdal\java;%GDAL_SDK_ROOT%\bin;%GDAL_SDK_ROOT%\bin\gdal\apps

已确认PATH配置正确,问题根源是GDAL二进制包中缺失对应的依赖DLL,恳请提供解决方案。


内容的提问来源于stack exchange,提问作者Zorobay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:15:08