An incompatible version [1.1.32] of the APR based Apache Tomcat Native library is installed

具体的错误信息如下:

**

2019-08-14 18:20:49.219 -ERROR [ restartedMain] o.a.j.l.DirectJDKLog : An incompatible version [1.1.32] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]

**

1.出错手顺:

使用SpringBoot搭建一个MVC的项目,然后使用Apache服务器正常启动(我这里是使用Idea开发工具自带的Apache),在Idea 的控制台会出现以上错误信息。

2.原因分析

根源是:这是由于Apache Tomcat Native library 就是APR(Apache Portable Runtime),这里的意思是建议使用apache的apr,同时要保证APR版本一致。由提示可以看出当前版本是1.2.14,但是本机是1.1.32,所以需要下载对应的版本。

由于高版本的SpringBoot (我这里的版本是2.1.7.RELEASE)对环境有一定的要求,比如JDK需要是8以及以上的,而Tomcat 也需要是8以上的。如果你使用的Tomcat 版本比较低的话,就会出现以上的错误。

3.解决方案

下载对应的APR文件放到Windows\System32下,或者Tomcat的bin目录下边或者是JDK的bin目录下边,其实这里边放到哪里都可以,前提是这个目录在系统的环境变量里面。而APR下载地址是:

地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/native/

4.注意事项

有的时候你下载完成,也放到相应目录,但是还是依然报错,那么有几点可能:

1.放置的目录没有在环境变量里面。这个就要确认你放置的目录确实是在环境变量中,否则不会生效。

2.有旧的版本没有清除。windows 喜欢在 system32 下某个隐藏的目录下复制一份 dll 的副本(具体哪个 dll 会复制到这里我也不确定,你得手工检查一次,Windows\System32 下搜索一次,把所有同名的删除掉),隐藏的哦,需要在文件夹选项中把它显示出来,把那些缓存的版本也删除干净。

把下面这段文字保存成一个 search.bat:

@echo File %1 is found at %~dp$PATH:1

然后输入命令:

C:\>search jscript.dll

会得到如下类似的结果:

File jscript.dll is found at C:\WINDOWS\system32\

我们能用它找出来你的 dll 到底是从哪个目录下找到的,每次你删除一个 dll 后再运行一次这个命令检查还有哪个目录下有它。确保在 tomcat\bin 目录之外再也没有了,以后就把你最新的版本放在 tomcat\bin 下就可以了

3.注意引入你系统位数一致的dll文件,是32位的,就引入tcnative-1.dll,如果是64位的,就引入64文件夹里面的tcnative-1.dll
不然又会出现如下错误:

java.lang.UnsatisfiedLinkError: C:\Windows\System32\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
	at java.lang.ClassLoader$NativeLibrary.load(Native Method) ~[?:1.8.0_131]
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) ~[?:1.8.0_131]
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) ~[?:1.8.0_131]
	at java.lang.Runtime.loadLibrary0(Runtime.java:870) ~[?:1.8.0_131]
	at java.lang.System.loadLibrary(System.java:1122) ~[?:1.8.0_131]
	at org.apache.tomcat.jni.Library.(Library.java:69) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
	at org.apache.tomcat.jni.Library.initialize(Library.java:206) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
	at org.apache.catalina.core.AprLifecycleListener.init(AprLifecycleListener.java:198) ~[tomcat-embed-core-9.0.22.jar:9.0.22]
	at org.apache.catalina.core.AprLifecycleListener.isAprAvailable(AprLifecycleListener.java:107) ~[tomcat-embed-core-9.0.22.jar:9.0.22]

你可能感兴趣的:(SpringBoot)