将SDKMAN!与Git Bash一起使用


TL; DR

当使用Windows的Git随附的Git Bash(MINGW64)或MSYS2时,可以将SDKMAN!通过将以下内容添加到.bashrc中来使用。

.bashrc

1
export MSYS=winsymlinks:lnk

安装本身如下,因此将其省略。

https://sdkman.io/install

蛇纹石

您为什么尝试使用SDKMAN!

各种供应商和社区正在构建和提供JDK,因此我想使其易于切换。 (您认为吗?)

如果要执行上述操作,则需要一个工具来管理版本,例如JDK。
在JVM系统中有一个名为SDKMAN!的工具,因此请使用它。

  • SDKMAN!软件开发工具包管理器

有关可以使用SDKMAN!安装的SDK,请参阅以下内容(指示是因为已编写。表示可以安装。可以安装各种语言,工具,应用程序框架等)。

  • 可用的SDK --SDKMAN!软件开发工具包管理器

使用SDKMAN!与Git Bash

一起使用时的挑战

从下面的内容看,它似乎可以与Git Bash正常使用,但是尽管我可以下载JDK,但是当我尝试将其设置为默认值时,会发生错误。

https://sdkman.io/install

1
2
3
4
5
6
7
$ 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/configtrue中的sdkman_debug_mode)

查看

代码,似乎在以下rm -f处发生错误。

https://github.com/sdkman/sdkman-cli/blob/b63ee15c8885b89ea09dee4f965fbd48167398d1/src/main/bash/sdkman-path-helpers.sh#L85

错误的原因是,如果您没有在开始时设置它,则ln -s不会创建符号链接,而是一个副本。由于它将是目录而不是符号链接,因此rm -f将导致错误。

…因此,通过返回开头并设置MSYS=winsymlinks:lnk,将创建??符号链接(Windows快捷方式)而不是副本,并且可以安全地使用它。

参考

  • MSYS2小故事集-奇塔
  • https://cygwin.com/cygwin-ug-net/using-cygwinenv.html