IntelliJ IDEA中Spring Boot项目出现Apache Tomcat Native库未找到错误
问题描述
在IntelliJ IDEA中开发Java+Spring Boot项目时,突然出现Apache Tomcat Native库未找到的错误,调试输出如下:
12:51:54.926 [restartedMain] DEBUG o.a.c.core.AprLifecycleListener - The Apache Tomcat Native library could not be found using names [tcnative-2, libtcnative-2, tcnative-1, libtcnative-1] on the java.library.path [C:\Program Files\Java\jdk-20\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:....... at org.apache.tomcat.jni.Library.<init>(Library.java:91) at org.apache.tomcat.jni.Library.initialize(Library.java:147) at org.apache.catalina.core.AprLifecycleListener.init(AprLifecycleListener.java:189) at org.apache.catalina.core.AprLifecycleListener.isAprAvailable(AprLifecycleListener.java:106) at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getDefaultServerLifecycleListeners(TomcatServletWebServerFactory.java:189)
该问题无征兆出现:未添加新依赖、未修改包结构或配置,JAVA_HOME及系统路径均指向64位Java,系统为64位,从未使用过32位版本。
已知该问题通常不影响程序功能,但希望在不直接指定DLL库的前提下解决。已尝试过类似问题的常见解决方案(包括Asif Kamran Malick的方案),均无效。
可能原因与解决方法
可能原因
- Tomcat嵌入式版本依赖变更:Spring Boot自动管理的Tomcat依赖可能在某次自动更新(如IDEA依赖刷新、Maven/Gradle快照更新)中,引入了需要APR库的版本,但本地环境未配套。
java.library.path隐式变更:系统环境变量或IDEA运行配置中,java.library.path被意外修改,导致原本存在的库路径被移除。- 缓存或依赖冲突:Maven/Gradle本地缓存中存在损坏的Tomcat相关依赖,导致APR监听器被错误加载。
解决方法
1. 禁用Tomcat APR监听器
在Spring Boot配置中直接禁用APR,从根源消除错误:
- 若使用
application.properties,添加:
server.tomcat.use-apr=false
- 若使用
application.yml,添加:
server: tomcat: use-apr: false
2. 强制锁定Tomcat版本
如果是依赖版本变更导致问题,在构建文件中明确指定Tomcat版本,避免自动更新到需要APR的版本:
- Maven(
pom.xml):
<properties> <tomcat.version>9.0.80</tomcat.version> <!-- 替换为之前正常运行的Tomcat版本 --> </properties>
- Gradle(
build.gradle):
ext['tomcat.version'] = '9.0.80'
3. 清理并重新加载依赖
- 清理本地构建缓存:
- Maven执行:
mvn clean install -U - Gradle执行:
gradle clean build --refresh-dependencies
- Maven执行:
- 在IntelliJ IDEA中执行
File -> Invalidate Caches...,选择清除缓存并重启IDEA。
4. 检查并修复java.library.path
- 查看IDEA运行配置中的
VM options,确认是否有修改java.library.path的参数,若有则移除或修正。 - 检查系统环境变量
PATH,确保包含Tomcat Native库可能存在的路径(若之前安装过相关库),无需手动指定DLL,仅保证路径配置正确。
内容的提问来源于stack exchange,提问作者Romul Fobos
相关产品推荐
相关产品推荐

