代码之家  ›  专栏  ›  技术社区  ›  lev

truthy不适用于sbt new

  •  2
  • lev  · 技术社区  · 7 年前

    我用giter8创建了一个模板项目,并尝试添加条件表达式。

    defaults.properties 我补充道:

    param=true
    

    在我添加的模板文件中:

      $if(param.truthy)$
      ....
      $endif$
    

    在生成项目时,使用:

    g8 file://proj.g8
    

    一切正常。
    在互动部分, param 将有2个选项:

    参数 [是/否] :

    生成的文件将根据 参数

    但是,当我生成项目时:

    sbt new file://proj.g8
    

    参数 正在被视为字符串。
    在交互部分中,没有是/否选项:

    参数 [是] :

    我得到以下错误:

    由于模板文件中的错误而退出: /tmp/giter8-135496483100759/src/main/g8/build。sbt,上下文[匿名] 44:6内部错误:组织。stringtemplate。v4.编译器。ST例外: 上下文[匿名]44:6没有此类属性或无法访问: Java语言lang.String。真实原因: 组织。stringtemplate。v4.misc。STNoSuchPropertyException:没有这样的 属性:java。lang.String。truthy在 组织。stringtemplate。v4.misc。ObjectModelAdapter。throwNoSuchProperty(ObjectModelAdapter.java:167) 在 组织。stringtemplate。v4.misc。ObjectModelAdapter。getProperty(ObjectModelAdapter.java:89) 在 组织。stringtemplate。v4.解释器。getObjectProperty(解释器.java:1200) 位于组织。stringtemplate。v4.解释器_exec(解释器:210) 组织。stringtemplate。v4.解释器。exec(解释器:145) 组织。stringtemplate。v4.ST.write(ST.java:427)位于 组织。stringtemplate。v4.ST.render(ST.java:497)位于 组织。克拉珀。scalasti。ST.render(ST.scala:285)位于 吉特8.G8美元。applyTemplate(g8.scala:102)位于 吉特8.G8美元。在giter8写入(g8.scala:154)。G8美元。写入(g8.scala:138) 吉特8.G8美元$anonfun$writeTemplates$3(g8.scala:396)位于 斯卡拉。util。控制例外$捕获$anonfun$opt$1(例外。scala:242) 在scala。util。控制例外$捕获。应用(异常。scala:224)于 斯卡拉。util。控制例外$捕获。opt(异常。scala:242)位于 吉特8.G8美元$anonfun$writeTemplates$2(g8.scala:396)位于 斯卡拉。收集不变的流动foreach(流量:530) 吉特8.G8美元。writeTemplates(g8.scala:386)位于 吉特8.G8美元$anonfun$applyT$1(g8.scala:257)位于 斯卡拉。util。美元RightProjection。平面图(scala:702) 吉特8.G8美元。applyT(g8,scala:249)at 吉特8.G8美元。fromDirectory(g8.scala:62)位于 giter8.JgitHelper美元$anonfun$运行$3(JgitHelper.scala:64) 斯卡拉。util。美元RightProjection。平面图(scala:702) giter8.JgitHelper美元。运行(JgitHelper.scala:63) giter8.giter8$anonfun$运行$2(giter8.scala:34),位于 斯卡拉。选项地图(可选比例:146)位于 giter8.giter8。运行(giter8.scala:33) SBTGITER8分解器。Giter8TemplateResolver。运行(Giter8TemplateResolver.scala:31) 在太阳下。反映NativeMethodAccessorImpl。位于的invoke0(本机方法) 太阳反映NativeMethodAccessorImpl。调用(NativeMethodAccessorImpl.java:62) 在 太阳反映DelegatingMethodAccessorImpl。调用(DelegatingMethodAccessorImpl.java:43) 在java。lang.reflect。方法调用(Method.java:498) sbt。TemplateCommandUtil$。调用(TemplateCommand.scala:100) sbt。TemplateCommandUtil$。runTemplate(TemplateCommand.scala:78)位于 sbt。TemplateCommandUtil$$anonfun$run$1(TemplateCommand.scala:58)位于 sbt。TemplateCommandUtil$$anonfun$run$1$adapted(TemplateCommand.scala:54) 在 斯卡拉。收集LinearSEQ已优化。查找(LinearSeqOptimized。scala:111) 在 斯卡拉。收集LinearSEQ已优化。查找$(LinearSeqOptimized.scala:108) 在scala。收集不变的列表查找(列表scala:86) sbt。TemplateCommandUtil$。运行(TemplateCommand.scala:54) sbt。TemplateCommandUtil$。runTemplate(TemplateCommand.scala:41)位于 sbt。TemplateCommandUtil$$anonfun$templateCommand$2(templateCommand.scala:24) 在sbt。命令$$anonfun$applyEffect$4(命令scala:134)位于 sbt。命令$$anonfun$applyEffect$2(命令.scala:130)位于 sbt。MainLoop美元。processCommand(MainLoop.scala:153)位于 sbt。MainLoop美元$anonfun$下一个$2(MainLoop.scala:136)位于 sbt。州$$非1美元。runCmd$1(State.scala:242)位于 sbt。州$$非1美元。进程(状态:248) sbt。MainLoop美元$anonfun$下一个$1(MainLoop.scala:136)位于 sbt。内部的util。错误处理$。wideConvert(错误处理。scala:16) 在sbt。MainLoop美元。下一个(MainLoop.scala:136)位于 sbt。MainLoop美元。运行(MainLoop.scala:129) sbt。MainLoop美元$anonfun$runWithNewLog$1(MainLoop.scala:107)位于 sbt。io。使用。应用(使用.scala:22)于 sbt。MainLoop美元。在以下位置运行WithNewLog(MainLoop.scala:101) sbt。MainLoop美元。runAndClearLast(主循环。scala:57)位于 sbt。MainLoop美元。runLoggedLoop(MainLoop.scala:42)位于 sbt。MainLoop美元。运行记录(MainLoop.scala:34) sbt。StandardMain美元。运行管理(主规模:113) sbt。xMain公司。运行(主刻度:76) xsbt。靴子启动$$anonfun$运行$1。应用(启动scala:109) xsbt。靴子启动$。withContextLoader(启动。scala:128)位于 xsbt。靴子启动$。运行(启动,scala:109) xsbt。靴子启动$$anonfun$应用$1。应用(启动。scala:35) xsbt。靴子启动$。发布时间(发布时间:117) xsbt。靴子启动$。应用(启动。scala:18) xsbt。靴子启动$。runImpl(Boot.scala:41)位于 xsbt。靴子启动$。main(启动scala:17)位于 xsbt。靴子靴子主(启动scala)

    在giter8。G8$STErrorHandler。运行时错误(g8.scala:110) G8$STErrorHandler。运行时错误(g8.scala:105) 组织。stringtemplate。v4.misc。ErrorManager。runTimeError(ErrorManager.java:137) 在 组织。stringtemplate。v4.解释器。getObjectProperty(解释器。java:1203) 位于组织。stringtemplate。v4.解释器_exec(解释器:210) 组织。stringtemplate。v4.解释器。exec(解释器:145) 组织。stringtemplate。v4.ST.write(ST.java:427)位于 组织。stringtemplate。v4.ST.render(ST.java:497)位于 组织。克拉珀。scalasti。ST.render(ST.scala:285)位于 吉特8.G8美元。applyTemplate(g8.scala:102)位于 吉特8.G8美元。在giter8写入(g8.scala:154)。G8美元。写入(g8.scala:138) 吉特8.G8美元$anonfun$writeTemplates$3(g8.scala:396)位于 斯卡拉。util。控制例外$捕获$anonfun$opt$1(例外。scala:242) 在scala。util。控制例外$捕获。应用(异常。scala:224)于 斯卡拉。util。控制例外$捕获。opt(异常。scala:242)位于 吉特8.G8美元$anonfun$writeTemplates$2(g8.scala:396)位于 斯卡拉。收集不变的流动foreach(流量:530) 吉特8.G8美元。writeTemplates(g8.scala:386)位于 吉特8.G8美元$anonfun$applyT$1(g8.scala:257)位于 斯卡拉。util。美元RightProjection。平面图(scala:702) 吉特8.G8美元。applyT(g8,scala:249)at 吉特8.G8美元。fromDirectory(g8.scala:62)位于 giter8.JgitHelper美元$anonfun$运行$3(JgitHelper.scala:64) 斯卡拉。util。美元RightProjection。平面图(scala:702) giter8.JgitHelper美元。运行(JgitHelper.scala:63) giter8.giter8$anonfun$运行$2(giter8.scala:34),位于 斯卡拉。选项地图(可选比例:146)位于 giter8.giter8。运行(giter8.scala:33) SBTGITER8分解器。Giter8TemplateResolver。运行(Giter8TemplateResolver.scala:31) 在太阳下。反映NativeMethodAccessorImpl。位于的invoke0(本机方法) 太阳反映NativeMethodAccessorImpl。调用(NativeMethodAccessorImpl.java:62) 在 太阳反映DelegatingMethodAccessorImpl。调用(DelegatingMethodAccessorImpl.java:43) 在java。lang.reflect。方法调用(Method.java:498) sbt。TemplateCommandUtil$。调用(TemplateCommand.scala:100) sbt。TemplateCommandUtil$。runTemplate(TemplateCommand.scala:78)位于 sbt。TemplateCommandUtil$$anonfun$run$1(TemplateCommand.scala:58)位于 sbt。TemplateCommandUtil$$anonfun$run$1$adapted(TemplateCommand.scala:54) 在 斯卡拉。收集LinearSEQ已优化。查找(LinearSeqOptimized。scala:111) 在 斯卡拉。收集LinearSEQ已优化。查找$(LinearSeqOptimized.scala:108) 在scala。收集不变的列表查找(列表scala:86) sbt。TemplateCommandUtil$。运行(TemplateCommand.scala:54) sbt。TemplateCommandUtil$。runTemplate(TemplateCommand.scala:41)位于 sbt。TemplateCommandUtil$$anonfun$templateCommand$2(templateCommand.scala:24) 在sbt。命令$$anonfun$applyEffect$4(命令scala:134)位于 sbt。命令$$anonfun$applyEffect$2(命令.scala:130)位于 sbt。MainLoop美元。processCommand(MainLoop.scala:153)位于 sbt。MainLoop美元$anonfun$下一个$2(MainLoop.scala:136)位于 sbt。州$$非1美元。runCmd$1(State.scala:242)位于 sbt。州$$非1美元。进程(状态:248) sbt。MainLoop美元$anonfun$下一个$1(MainLoop.scala:136)位于 sbt。内部的util。错误处理$。wideConvert(错误处理。scala:16) 在sbt。MainLoop美元。下一个(MainLoop.scala:136)位于 sbt。MainLoop美元。运行(MainLoop.scala:129) sbt。MainLoop美元$anonfun$runWithNewLog$1(MainLoop.scala:107)位于 sbt。io。使用。应用(使用.scala:22)于 sbt。MainLoop美元。在以下位置运行WithNewLog(MainLoop.scala:101) sbt。MainLoop美元。runAndClearLast(主循环。scala:57)位于 sbt。MainLoop美元。runLoggedLoop(MainLoop.scala:42)位于 sbt。MainLoop美元。运行记录(MainLoop.scala:34) sbt。StandardMain美元。运行管理(主规模:113) sbt。xMain公司。运行(主刻度:76) xsbt。靴子启动$$anonfun$运行$1。应用(启动scala:109) xsbt。靴子启动$。withContextLoader(启动。scala:128)位于 xsbt。靴子启动$。运行(启动,scala:109) xsbt。靴子启动$$anonfun$应用$1。应用(启动。scala:35) xsbt。靴子启动$。发布时间(发布时间:117) xsbt。靴子启动$。应用(启动。scala:18) xsbt。靴子启动$。runImpl(Boot.scala:41)位于 xsbt。靴子启动$。main(启动scala:17)位于 xsbt。靴子靴子主(启动scala)

    我正在使用版本 0.11.0-M3 对于两者 g8 sbt-giter8 插件

    如何解决此问题?

    编辑:更多详细信息:
    我正在使用sbt 1.1.1(用于g8项目和我机器上的sbt启动器)
    我在文件中添加了g8项目中的插件 project/plugins.sbt 具有

    addSbtPlugin("org.foundweekends.giter8" %% "sbt-giter8" % "0.11.0-M3")
    

    如果我从模板中删除truthy零件,则项目将从中正确生成 sbt new


    此问题已在sbt 1.2.0中修复
    为了修复,应使用:
    sbt -Dsbt.version=1.2.0 new file://proj.g8

    1 回复  |  直到 6 年前
        1
  •  3
  •   laughedelic    7 年前

    内部使用的giter8版本 sbt new 已修复并添加 sbt-giter8 插件不会改变它。sbt 1.1.1 uses sbt-giter8-resolver v0.1.3,其中 uses giter8 0.7.2(不支持条件)。

    您可以更新sbt-giter8-resolver,在本地发布它并尝试替换默认值 Giter8TemplatePlugin ,但我认为这不值得。仅使用 g8 直到sbt更新。

    那里 was an effort 支持任意giter8版本 set in the template ,但有些东西 went wrong 此功能已恢复。