我在Windows上使用Eclipse中的Tomcat 7。启动Tomcat时,我收到以下信息:
在java.library.path中找不到基于APR的Apache Tomcat Native库,它可以在生产环境中实现最佳性能
这意味着什么?我如何提供APR库?
答案 0 :(得分:101)
这正是它所说的:“在java.library.path中找不到基于APR的Apache Tomcat Native库,它可以在生产环境中实现最佳性能”
所引用的库捆绑到通过JNI加载的OS特定的dll(tcnative-1.dll)中。它允许tomcat使用Java Runtime中未提供的OS功能(例如sendfile,epoll,OpenSSL,系统状态等)。如果没有它,Tomcat将运行得很好,但对于某些用例,使用本机库会更快。
如果你真的想要它,请下载tcnative-1.dll
(or libtcnative.so
for Linux)并将其放在bin文件夹中,并在eclipse中将系统属性添加到tomcat服务器的启动配置中。
-Djava.library.path=c:\dev\tomcat\bin
答案 1 :(得分:29)
除非您正在运行生产服务器,否则请不要担心此消息。这是一个用于提高性能的库(在生产系统上)。来自Apache Portable Runtime (APR) based Native library for Tomcat:
Tomcat可以使用Apache Portable Runtime提供优越的功能 可扩展性,性能以及与本机服务器的更好集成 技术。 Apache Portable Runtime是一个高度可移植的库 这是Apache HTTP Server 2.x的核心。 APR有很多用途, 包括访问高级IO功能(如sendfile,epoll 和OpenSSL),操作系统级功能(随机数生成,系统 状态等)和本机进程处理(共享内存,NT管道和 Unix套接字)。
答案 2 :(得分:24)
在RHEL Linux上只发出:
yum install tomcat-native.x86_64
/注意:根据您的架构,64位或32位封装可能有不同的扩展名/
就是这样。之后您将在日志文件中找到下一条信息性消息:
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
所有操作都会比以前快得多。
答案 3 :(得分:19)
使用以下命令在Ubuntu服务器上安装本机库:
sudo apt-get install libtcnative-1
如果不起作用,则需要安装tomcat-native
安装Oracle java7:
安装tomcat apr:
安装tomcat tomcat-native:
答案 4 :(得分:6)
我刚刚完成了这个并配置了以下内容:
Ubuntu 16.04
Tomcat 8.5.9
Apache2.4.25
APR 1.5.2
Tomcat-native 1.2.10
Java 8
这些是我根据旧帖子使用的步骤:
sudo apt-get update
sudo apt-get install libtcnative-1
sudo apt-get install make
sudo apt-get install gcc
sudo apt-get install openssl
sudo apt-get install libssl-dev
cd / opt / tomcat / bin
sudo wget http://apache.mirror.anlx.net//apr/apr-1.5.2.tar.gz
sudo tar -xzvf apr-1.5.2.tar.gz
cd apr-1.5.2
sudo ./configure
sudo make
sudo make install
cd / usr / local / apr / lib /
ls
libapr-1.la
cd / opt / tomcat / bin
sudo tar -xzvf tomcat-native-1.2.10-src.tar.gz
cd tomcat-native-1.2.10-src / native
sudo pico~ / .bashrc
export JAVA_HOME = / usr / lib / jvm / java-8-openjdk-amd64
source~ / .bashrc
sudo ./configure --with-apr = / usr / local / apr --with-java-home = $ JAVA_HOME
sudo make
sudo make install
sudo pico /opt/tomcat/bin/setenv.sh
export LD_LIBRARY_PATH ='$ LD_LIBRARY_PATH:/ usr / local / apr / lib'
sudo service tomcat restart
答案 5 :(得分:5)
也有这个问题。如果您执行拥有库,但仍有此错误,则可能是配置错误。您的server.xml
可能缺少以下一行:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
(或者,它可能会被注释掉)。与其他听众一样,此<Listener>
是顶级<Server>
的孩子。
如果没有<Listener>
行,则不会尝试加载APR库,因此会忽略LD_LIBRARY_PATH
和-Djava.library.path=
设置。
答案 6 :(得分:4)
在debian 8上我修复了安装libapr1-dev
:
apt-get install libtcnative-1 libapr1-dev
答案 7 :(得分:0)
当tomсat无法找到课程时,我遇到了同样的问题。尝试查看其他日志文件。有时在不同的日志文件中不会出现类def def错误:
答案 8 :(得分:0)
如果您没有Tomcat Native库,请安装:
sudo apt-get install libtcnative-1
如果还有旧版本升级它:
sudo apt-get upgrade libtcnative-1
答案 9 :(得分:0)
我遇到了这个问题,从Java 8升级到11 。添加此依赖关系后,我的应用程序启动没有问题:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.25.0-GA</version>
</dependency>
答案 10 :(得分:0)
在Mac OS X上:
$ brew install tomcat-native
==> tomcat-native
In order for tomcat's APR lifecycle listener to find this library, you'll
need to add it to java.library.path. This can be done by adding this line
to $CATALINA_HOME/bin/setenv.sh
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/opt/tomcat-native/lib"
If $CATALINA_HOME/bin/setenv.sh doesn't exist, create it and make it executable.
然后将其添加到Eclipse的tomcat参数中(双击服务器> 打开启动配置>参数选项卡> VM参数)>
-Djava.library.path=/usr/local/opt/tomcat-native/lib
答案 11 :(得分:0)
我的问题是在tomcat中添加一些库到eclipse类路径,我只是要
eclipse单击右键进行投影,然后从debug configuration -> classpath -> Add External JARs
apache-tomcat-7.0.35\bin
添加所有jar文件,这是我的问题,对我有用。
答案 12 :(得分:0)
对于未来的读者: 当我尝试在 Spring STS 中运行 Spring Boot 应用程序时,我自己也遇到过这个问题。这个问题最初没有重新出现。我能够在很长一段时间内毫无问题地处理我的项目,直到有一天我开始收到此特定错误。
据我所知,我没有对我的项目进行任何配置更改,也没有更改正在使用的 Java/Tomcat 版本。
关于安装 tomcat 本机库 的任何讨论/建议对我来说都没有任何意义,因为该项目之前已经运行良好。
对我有用的解决方案:
所以最后我想删除并重新导入我的项目。
我从 Spring STS 删除我的项目,重新启动 Spring STS,然后重新导入该项目。它就像一种魅力,从那时起就再也没有遇到过这个问题。
您也可以尝试删除项目中任何 IDE 生成的文件/文件夹(如果有),然后重新启动 IDE 并重新导入项目。
我仍然不时参与这个项目,目前还没有遇到这个问题。我目前的开发 IDE 是 IntelliJ。
我不确定该错误是否特定于 IDE。