LoginSignup
11
10

More than 5 years have passed since last update.

Git BashでSDKMAN!を使う

Last updated at Posted at 2019-02-27

TL;DR

Git for Windows に付属しているGit Bash(MINGW64)やMSYS2などを利用する際は、以下を .bashrc などに追加することでSDKMAN!の利用が可能になります。

.bashrc
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/configsdkman_debug_modetrue に)

コードを見てみると、以下の rm -f している箇所でエラーになっているようです。

なぜエラーになるのかというと、冒頭の設定をしていない場合、 ln -s ではシンボリックリンクは作成されず、コピーが作成されます。シンボリックリンクではなくディレクトリになるので、 rm -f でエラーになってしまいます。

…ということで、冒頭に戻り MSYS=winsymlinks:lnk とすることでコピーではなくシンボリックリンク(Windowsのショートカット)が作成されるようになり、無事利用できるようになりました。

参考

11
10
0

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
11
10