【发布时间】:2016-06-30 18:56:51
【问题描述】:
我正在使用 Tomcat7 和 Ubuntu。我有一个使用一些本机库的 Java Web 应用程序。当我在 Eclipse 中运行 Web 应用程序时,它在调试期间通过 Eclipse 内部 Tomcat 服务器运行。但是,当我将应用程序部署到托管的 Tomcat 服务时,应用程序在到达加载这些库的点时会失败。
- 我将原生库放在 /home/me/my_shared_libs 中,并提供了
用户“Tomcat7”的文件夹和文件所有权——sudo chown - 我将本机库的所有权限授予“Tomcat7”用户
--
sudo chmod - 在做
sudo vi /usr/share/tomcat7/bin/setenv.sh,并把以下 在文件export CATALINA_OPTS="-Djava.library.path=/home/me/my_shared_libs" - 然后我重新启动 Tomcat --
sudo service tomcat7 restart并且,无论何时 达到加载本机库的参考,我收到关于InvocationTargetException的错误。
我也愿意将本机库添加为应用程序的 .WAR 文件的一部分。 (虽然我不确定如何在 Eclipse 中执行此操作)。
/var/log/tomcat7/catalina.out的日志-->
Jun 30, 2016 8:11:50 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3643 ms
Load my_native_lib_called. libmachoman.so: cannot open shared object file: No such file or directory
编辑: 我发现了一件非常有趣的事情。 Tomcat 确实选择了我在上面设置的库位置。发生的情况是我在该位置有两种类型的库 (.so) 文件。第一个库 (libcore.so) 调用/加载第二个库 (libmachoman.so)。找到并加载了 libcore.so 和 libmachoman.so 都没有,即使两者都在同一个位置。
【问题讨论】:
-
你能看到启动日志中设置的库路径吗?
-
@11thdimension 谢谢。不,我没有看到 Tomcat 选择了我在上面设置的路径。感谢您提供这些新知识。我怎样才能确保它确实如此?我只是将tomcat的日志添加到问题中。
-
在你提到的问题标题中,tomcat 作为服务运行。您可以在此处找到为 Tomcat 创建服务和参数的脚本。
-
@11thdimension 这听起来像是一个艰难的解决方案,尤其是因为我正在部署多个系统而不仅仅是一个服务器。我宁愿有一个特定于应用程序的解决方案,也不愿更改系统设置。将本机库作为 .war 文件的一部分导出对我有用,但我不知道该怎么做。
-
你能不能试着不把它们放在 /home/* 目录下。以防万一 /home/ 给出奇怪的结果。
标签: java eclipse web-services tomcat catalina