giter8模板truthy在sbt new命令下失效问题咨询
解决sbt new下Giter8模板truthy表达式失效的问题
我之前也踩过这个坑!问题根源在于sbt new和原生g8命令对Giter8模板参数的解析逻辑有差异,尤其是布尔类型参数的处理上。
问题原因
你在defaults.properties里只写了param=true,原生g8命令会自动推断这是布尔类型,所以param.truthy能正确判断参数的真假;但sbt new在处理参数时,默认会把所有未明确类型的参数当成字符串处理——这时候param的值是字符串"true",而Giter8的truthy属性对字符串的判断逻辑是“非空即真”,如果后续交互中输入no,参数会变成字符串"no",truthy依然会返回true(因为字符串非空),直接导致你的条件判断完全失效。
解决方案
只需要在defaults.properties里明确指定参数的布尔类型,就能让sbt new和原生g8命令的行为保持一致:
修改
defaults.properties的参数定义:param:Boolean=true这里的
:Boolean明确告诉Giter8这个参数是布尔类型,不管是原生命令还是sbt new都会正确解析参数类型。保持模板里的条件表达式不变:
$if(param.truthy)$ # 这里是你要根据参数显示的内容 $endif$
这样修改后,用sbt new file://proj.g8生成项目时,交互环节依然会显示param [YES/no] :,输入YES时param会被识别为布尔true,条件内容会被包含;输入no时识别为false,条件内容会被跳过,和原生g8命令的表现完全一致。
内容的提问来源于stack exchange,提问作者lev
相关产品推荐
相关产品推荐

