LoginSignup
8

More than 5 years have passed since last update.

scoop でパッケージ管理する bucket が変更された時の追跡の仕方 ( 主に Java )

Posted at

久しぶりに scoop パッケージの棚卸しをした際、こんな事になっていた。

PS> scoop status

image.png

メンテナンスによって、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 を判定しているらしい。

なので、以下のように変更することで、アップデートが追跡できるようになる。

install.json
{
+    "bucket":  "java",
    "architecture":  "64bit"
}
PS> scoop update openjdk

image.png

ちなみに、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 の参照先を切り替えてくれる。シビアな開発してなければこれで十分。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8