2016/08/04

最新版の update-java-alternatives は javac を更新してくれない

2018/2/12 追記
java-common 0.59 で対応されたようです。
ただし、java-common 0.59 の適用は Ubuntu 17.10 からです。ご注意を。

@Ubuntu 16.04 LTS

先日、update-java-alternatives に Oracle java も追加する という投稿をしたのですが、 使っていると想定した動作をしていないことがわかりました。

新規導入の jdkhl が反映されない

update-java-alternatives --set xxx を実行しても、javac などの一部のアプリケーションが更新されないのです。 /usr/lib/jvm/.x.jinfo を何度も確認しましたが、書き方に問題は無い様子。

/usr/sbin/update-java-alternatives はシェルスクリプトなので、中をのぞいて見ると、jdkhl という項目を無視しているのがわかりました。 この項目は最近追加されたもので、それが反映されていないようです。 ググッてみたら、バグのようですね。

参考
Bug #1603692 “java-update-alternatives doesn't recognize jdkhl l...” : Bugs : java-common package : Ubuntu

修正方法

本体を直接修正するのは避けたいので、~/bin 等にスクリプトをコピーして編集するのが良いかと思います1

$ cp /usr/sbin/update-java-alternatives ~/bin/my-update-java-alternatives
$ vi ~/bin/my-update-java-alternatives

L. 66

66
67
which='^(hl|jre|jdk|plugin|DUMMY) '
if [ -n "$hlonly$jreonly$pluginonly" ]; then

以下のように、jdkhl を追加します。

66
67
which='^(hl|jre|jdkhl|jdk|plugin|DUMMY) '
if [ -n "$hlonly$jreonly$pluginonly" ]; then

実行時はフルパスで

sudo 実行時は、環境変数 PATH がリセットされてしまう場合があるので、フルパス指定するようにしましょう2

$ sudo ~/bin/my-update-java-alternatives --set java-1.8.0-openjdk-amd64

いずれにしても、この対策は一時的なものです。本体の修正を待ちましょう3

  1. 名前も my- を先頭につけるなど変えておくと区別がつきやすくて良いでしょう。 
  2. パスを引き継ぐようにもできますが、このためだけにやるのもねぇ。 
  3. バクの status も confirmed になっているので、そのうち直ると思います。 
?

0 件のコメント: