久しぶりに scoop パッケージの棚卸しをした際、こんな事になっていた。
PS> scoop status
メンテナンスによって、openjdk のマニフェストファイルが main Bucket から無くなっていた。
( 因みに Bazel の方は、extras Bucket から main Bucket に昇格していた )
Java Bucket
では、Java はどこに行ってしまったのかというと、どうやら Java 関連のパッケージをまとめて独立させたらしい。
https://github.com/lukesampson/scoop/wiki/Java
https://github.com/se35710/scoop-java
これは公式 Bucket なので、以下だけで追加が可能
PS> scoop bucket add java
バージョンアップ
ということで、ようやく openjdk もアップグレードできるな、と思っていると、
PS> scoop update openjdk
# openjdk: 1.8.0.141-1 (latest version)
# Latest versions for all apps are installed! For more information try 'scoop status'
できない。
どうやら、Bucket を移動したものは更新を追跡しないらしい。
さて、どうしよう。
A. 最終手段
どうしようもない場合、一回消して入れ直せば対応はできる。
PS> scoop uninstall openjdk
PS> scoop install openjdk
しかし、これだと過去バージョンも全て削除されるので、場合によっては困ったことになる。
( 以前、同様の手段で Conda 環境を全バージョン削除してしまった。 )
B. 裏技
これは裏技なので、失敗しても泣かないように
では、scoop は何故、無くなった main bucket の manifest にこだわるのか。
実は、~/scoop/apps/APP_NAME/current/
以下に各アプリケーションの最新の実体があるのだが、どうやらその中の install.json
を見て Bucket を判定しているらしい。
なので、以下のように変更することで、アップデートが追跡できるようになる。
{
+ "bucket": "java",
"architecture": "64bit"
}
PS> scoop update openjdk
ちなみに、Bazel のように main に昇格した場合は、"bucket": "extras"
の行を丸ごと消せば良い。
おまけ
Java Bucket に移動したことで、JRE/JDK が ビルド毎 × バージョン毎 に提供される事になったので、システムのバージョン切り替えを scoop で管理することができるようになった。
◆ 提供パッケージ
- Oracle Java
- OpenJDK
- Zulu
- ojdkbuild
- AdoptOpenJDK
◆ 切り替え
PS> scoop install openjdk9 openjdk10 zulu10
# Open JDK 9 に切り替え
PS> scoop reset openjdk9
# Open JDK 10 に切り替え
PS> scoop reset openjdk10
# Zulu 10 に切り替え
PS> scoop reset zulu10
これで、java
コマンドと JAVA_HOME
の参照先を切り替えてくれる。シビアな開発してなければこれで十分。