为何SDKMAN无法为项目子目录更新Java SDK版本?是否需复制配置文件?
SDKMAN .sdkmanrc 仅根目录生效是否为预期行为?
问题描述
通过在项目根目录配置.sdkmanrc文件设置Java版本后,只有进入根目录时Java版本才会切换,进入子目录时版本无变化。请问这是预期行为吗?是否需要将.sdkmanrc同步到所有子目录?
复现示例
~ % mkdir root_dir ~ % cd root_dir root_dir % mkdir sub_dir root_dir % sdk env init .sdkmanrc created. root_dir % cat .sdkmanrc # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below java=8.0.345-tem root_dir % sed -i"" -e 's/8.0.345-tem/11.0.16-tem/' .sdkmanrc root_dir % cat .sdkmanrc # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below java=11.0.16-tem root_dir % cd .. ~ % cd root_dir/sub_dir sub_dir % cd .. Using java version 11.0.16-tem in this shell. root_dir % cd .. Restored java version to 8.0.345-tem (default)
参考环境
% sdk version SDKMAN 5.16.0 # macOS version % sw_vers -productVersion 12.5.1
已配置项
% grep sdkman_auto_env .sdkman/etc/config sdkman_auto_env=true
解答
这是预期行为。SDKMAN的自动环境切换逻辑默认只会检查当前进入的目录下是否存在
.sdkmanrc文件,不会主动向上遍历父目录查找配置,因此进入子目录时不会触发版本切换。不需要手动同步
.sdkmanrc到所有子目录,推荐两种更高效的解决方式:- 创建软链接:在需要继承配置的子目录中,执行
ln -s ../.sdkmanrc .sdkmanrc(根据子目录层级调整路径),让子目录指向根目录的配置文件。 - 开启递归查找:执行
sdk config命令,找到sdkman_auto_env_recursive选项并设置为true。开启后,SDKMAN会自动向上遍历父目录查找.sdkmanrc,子目录就能继承根目录的Java版本配置。
- 创建软链接:在需要继承配置的子目录中,执行
内容的提问来源于stack exchange,提问作者Brockenbrough
相关产品推荐
相关产品推荐

