TL;DR
Git for Windows に付属しているGit Bash(MINGW64)やMSYS2などを利用する際は、以下を .bashrc
などに追加することでSDKMAN!の利用が可能になります。
export MSYS=winsymlinks:lnk
インストール自体は以下の通りなので割愛。
蛇足
なぜSDKMAN!を使おうとしたのか
JDK、様々なベンダーやコミュニティがビルドし、提供されるようになってきているので、「気軽に切り替えられるようにしておきたい」と思うと思います。(思いますよね?)
上記のようなことを行う場合、JDKなどのバージョンを管理するツールが必要になってきます。
JVM系ではSDKMAN!というツールがあるので、これを利用します。
SDKMAN!を利用してインストールできるSDK(と書かれているので表記。言語、ツール、アプリケーションフレームワークなど様々なものがインストール可能)は以下を参照してください。
Git BashでSDKMAN!を利用する際の課題
以下を見るとGit Bashでふつうに利用できそうなのですが、JDKのダウンロードは出来るものの、デフォルトに設定しようとするとエラーになってしまいます。
$ sdk default java 8.0.202.hs-adpt
SDKMAN: No update needed. Using existing candidates cache: ant,asciidoctorj,bpipe,ceylon,crash,cuba,cxf,gaiden,glide,gradle,grails,groovy,groovyserv,infrastructor,java,jbake,kotlin,kscript,lazybones,leiningen,maven,micronaut,sbt,scala,spark,springboot,sshoogr,vertx,visualvm
Not refreshing version cache now...
Validate java 8.0.202.hs-adpt for MINGW64_NT-10.0: valid
Validation URL: https://api.sdkman.io/2/candidates/validate/java/8.0.202.hs-adpt/mingw64_nt-10.0
rm: cannot remove '/c/Users/tenten0213/.sdkman/candidates/java/current': Is a directory
ln: failed to create symbolic link '/c/Users/tenten0213/.sdkman/candidates/java/current/8.0.202.hs-adpt': File exists
↑はデバッグモードを有効にしています。( ~/.sdkman/etc/config
の sdkman_debug_mode
を true
に)
コードを見てみると、以下の rm -f
している箇所でエラーになっているようです。
なぜエラーになるのかというと、冒頭の設定をしていない場合、 ln -s
ではシンボリックリンクは作成されず、コピーが作成されます。シンボリックリンクではなくディレクトリになるので、 rm -f
でエラーになってしまいます。
…ということで、冒頭に戻り MSYS=winsymlinks:lnk
とすることでコピーではなくシンボリックリンク(Windowsのショートカット)が作成されるようになり、無事利用できるようになりました。