私はTomcat7とUbuntuを使用しています。私はいくつかのネイティブライブラリを使用するJava Webアプリケーションを持っています。 Eclipse内でWebアプリケーションを実行すると、デバッグ中にEclipse内部のTomcatサーバーを介して動作します。しかし、アプリケーションをホストされたTomcatサービスにデプロイすると、アプリケーションがこれらのライブラリをロードする時点に達したときにアプリケーションが失敗します。Tomcat(サービスとして)はJava Webアプリケーションのネイティブライブラリをロードしませんか?
- 私は「Tomcat7」ホーム/私/ my_shared_libs /でネイティブライブラリを入れて、ユーザーに
フォルダとファイルの所有権を与えた -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
EDIT: 私は非常に面白いものを見つけました。 Tomcatは上で設定したライブラリの場所を取得します。何が起こるかは、場所に2種類のライブラリ(.so)ファイルがあることです。最初のライブラリ(libcore.so)は、2番目のライブラリ(libmachoman.so)を呼び出し/ロードします。 libcore.soは見つかってロードされますが、libmachoman.soは両方とも同じ場所にあるにもかかわらず、ロードされません。
起動ログにライブラリパスが設定されていますか? – 11thdimension
@ 11th Dimensionありがとうございます。いいえ、私はTomcatが私が上で設定したパスを取得したのを見ていません。この新しい知識をありがとう。どうすればそれが保証されますか?私は質問にtomcatのログを追加しました。 – nikk
質問タイトルでは、tomcatがサービスとして実行されていると述べています。サービスを作成するスクリプトを見つけることができ、そこにTomcatのパラメータを追加することができます。 – 11thdimension