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

IntelliJ运行Maven子模块遇UnsatisfiedLinkError:找不到lwjgl.dll

解决Maven多模块项目中子模块单独运行LWJGL的UnsatisfiedLinkError问题

嘿,我来帮你搞定这个头疼的问题!首先得理清为啥父项目能正常跑,子模块却掉链子,然后一步步解决:

为什么父项目正常但子模块出错?

父项目运行时,要么是它的运行配置里已经包含了LWJGL原生库的路径参数,要么是Maven构建父项目时,通过插件或其他方式自动处理了原生库的加载路径。但当你单独运行子模块时,IntelliJ默认不会自动继承父项目的这些运行配置,而且LWJGL的原生库(比如lwjgl.dll)不是普通的JAR依赖——Maven只会帮你下载包含这些原生文件的JAR包,不会自动把里面的.dll/.so/.dylib文件提取到Java能识别的系统路径里,所以就会出现找不到库的错误。

具体解决方案

1. 检查子模块的LWJGL依赖配置

首先确认子模块的pom.xml是否正确引入了LWJGL的原生库依赖。如果父项目用了<dependencyManagement>管理版本,子模块需要显式引入完整的LWJGL依赖,包括对应平台的原生库:

<dependencies>
    <!-- 核心LWJGL依赖 -->
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl</artifactId>
        <version>你的LWJGL版本</version>
    </dependency>
    <!-- 对应Windows平台的原生库,根据系统替换为linux/macos版本 -->
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-natives-windows</artifactId>
        <version>你的LWJGL版本</version>
        <classifier>x86_64</classifier>
        <scope>runtime</scope>
    </dependency>
</dependencies>

2. 手动配置IntelliJ运行参数

直接给子模块的运行配置添加VM参数,指定LWJGL原生库的路径:

  • 打开IntelliJ的「Run/Debug Configurations」,找到你要运行的子模块主类配置
  • 在「VM options」里添加:
    -Dorg.lwjgl.librarypath=你的Maven本地仓库中LWJGL原生库的路径
    
    比如Windows下可能是:
    -Dorg.lwjgl.librarypath=C:\Users\你的用户名\.m2\repository\org\lwjgl\lwjgl-natives-windows\3.3.2\natives
    
    你可以在Maven仓库里找到对应版本的原生库JAR,解压后就能看到里面的.dll文件,路径指向这个文件夹即可。

3. 用Maven插件自动处理原生库

推荐用maven-dependency-plugin自动把原生库复制到项目目录,不用手动找路径:
在子模块的pom.xml里添加插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.6.0</version>
            <executions>
                <execution>
                    <id>copy-lwjgl-natives</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <includeGroupIds>org.lwjgl</includeGroupIds>
                        <includeArtifactIds>*natives*</includeArtifactIds>
                        <outputDirectory>${project.build.directory}/natives</outputDirectory>
                        <stripVersion>true</stripVersion>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后运行mvn process-resources,插件会把LWJGL的原生库文件复制到子模块的target/natives目录下。之后在运行配置的VM options里添加:

-Dorg.lwjgl.librarypath=${project.build.directory}/natives

这样每次构建后都会自动更新原生库路径,不用手动修改。

4. 启用调试模式定位问题

如果还是找不到问题,可以开启LWJGL的调试模式,查看它尝试加载库的详细路径:
在VM options里添加:

-Dorg.lwjgl.util.Debug=true -Dorg.lwjgl.util.DebugLoader=true

运行后控制台会输出LWJGL加载库的所有尝试路径,你就能知道它到底在找什么、找不到的原因是什么了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:10:22