IntelliJ运行Maven子模块遇UnsatisfiedLinkError:找不到lwjgl.dll
嘿,我来帮你搞定这个头疼的问题!首先得理清为啥父项目能正常跑,子模块却掉链子,然后一步步解决:
为什么父项目正常但子模块出错?
父项目运行时,要么是它的运行配置里已经包含了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」里添加:
比如Windows下可能是:-Dorg.lwjgl.librarypath=你的Maven本地仓库中LWJGL原生库的路径
你可以在Maven仓库里找到对应版本的原生库JAR,解压后就能看到里面的-Dorg.lwjgl.librarypath=C:\Users\你的用户名\.m2\repository\org\lwjgl\lwjgl-natives-windows\3.3.2\natives.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

