2016/08/04

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

@[Ubuntu](http://www.ubuntu.com/) 16.04 LTS

先日、[update-java-alternatives に Oracle java も追加する](https://kokufu.blogspot.jp/2016/07/update-java-alternatives-oracle-java.html) という投稿をしたのですが、
使っていると想定した動作をしていないことがわかりました。



### 新規導入の 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](https://bugs.launchpad.net/ubuntu/+source/java-common/+bug/1603692)


### 修正方法
本体を直接修正するのは避けたいので、`~/bin` 等にスクリプトをコピーして編集するのが良いかと思います名前も `my-` を先頭につけるなど変えておくと区別がつきやすくて良いでしょう。。

```console
`gutter: false;
$ cp /usr/sbin/update-java-alternatives ~/bin/my-update-java-alternatives
$ vi ~/bin/my-update-java-alternatives
```

L. 66

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

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

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


### 実行時はフルパスで
`sudo` 実行時は、環境変数 `PATH` がリセットされてしまう場合があるので、フルパス指定するようにしましょうパスを引き継ぐようにもできますが、このためだけにやるのもねぇ。。
```console
`gutter: false;
$ sudo ~/bin/my-update-java-alternatives --set java-1.8.0-openjdk-amd64
```

いずれにしても、この対策は一時的なものです。本体の修正を待ちましょうバクの status も confirmed になっているので、そのうち直ると思います。

0 件のコメント: