Javaパッケージ管理の話題の続きです。まず、ここに記録する意味で再録です。
Debianでは、Javaのパッケージを置くべき場所が決められています。例えば、/usr/share/javaに.jarが溜められるという具合です。そして、リンクでもって各Javaアプリケーションが使うようになっています。さらに芸が細かいのが、例えば、/usr/share/java/servlet-2.3.jarがオリジナルで、/usr/share/java/servlet.jarというリンクが作られ、バージョン情報が消えるところまで自動化されています。
そして、こういったやり方をLinux distributions間で標準化しようという動きがあるそうです。RPMでもそうなると幸せですね。
Javaの配置を守ることもさることながら、さらにDebianの芸が細かいのがリンクを用いたディレクトリ配置ポリシーです。例えば、Tomcat 3.3をaptでinstallすると、次のような構成になります。
$ ls -l /usr/share/tomcat drwxr-xr-x 2 root root 104 6月 26 11:23 bin lrwxrwxrwx 1 root root 11 6月 26 11:23 conf -> /etc/tomcat lrwxrwxrwx 1 root root 13 6月 26 11:23 doc -> ../doc/tomcat drwxr-xr-x 2 root root 48 4月 24 20:08 examples drwxr-xr-x 5 root root 192 6月 26 11:23 lib lrwxrwxrwx 1 root root 15 6月 26 11:23 logs -> /var/log/tomcat drwxr-xr-x 2 root root 48 4月 24 20:08 modules lrwxrwxrwx 1 www-data www-data 23 6月 26 11:23 webapps -> /var/lib/tomcat/webapps lrwxrwxrwx 1 root root 17 6月 26 11:23 work -> /var/cache/tomcat
_ こういったリンクの使い方は、当たり前といえば当たり前ですが、最初驚きでした(例えば、文書ファイルを月ごとに仕分けて保存している場合、currentというリンクを作るなど)。また、Debianだと自動でここまでやってくれるのが嬉しいです(ひょっとしたらTomcat最新のrpmでは既にこんな具合になっているのかも知れませんが、4.0.2では、etc以外、/var/tomcat4にそのまま展開されていました)。
とここまで書いて、改めてKondaraマシンをよく見たら、regexpやxerces・servletapiのrpmは、既に、/usr/share/javaに展開されていて、バージョンを除いたリンクも作られていました。Javaの配置ポリシーは、RPM陣営でもかなり普及しているのかもしれません。
Debianで、# /etc/init.d/tomcat4 start して、Strutsで作った自作Webアプリを動かすと、なぜか上記エラーが出ます。servlet-2.3.jarでなくservlet-2.2.jarが、参照されているか上書きされているかのどちらかが原因だと思うのですが、その様子はなし。で、# $CATALINA_HOME/bin/catalina.sh start すると、正常に動作します。その後、# /etc/init.d/tomcat4 start すれば正常に動きます。
コンパイル・キャッシュが利いて動作するようになったと思うのですが、詳細は不明です。catalina.shと/etc/init.d/tomcat4で、なんか設定が違うのでしょうが、ちょっと見たけど、原因は不明です。とりあえず動くようになりましたが、気持ち悪いです。うーん。