【问题标题】:truthy doesn't work with sbt new真实不适用于 sbt new
【发布时间】:2018-09-02 19:11:53
【问题描述】:

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

defaults.properties我加了:

param=true

在我添加的模板文件中:

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

当我生成项目时:

g8 file://proj.g8

一切都按预期进行。
在交互部分,param 将有 2 个选项:

参数[是/否]

生成的文件将包含基于param值的附加文本

但是,当我生成项目时:

sbt new file://proj.g8

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

参数[是]

我收到以下错误:

由于模板文件中的错误而退出: /tmp/giter8-135496483100759/src/main/g8/build.sbt,上下文 [匿名] 44:6 内部错误:org.stringtemplate.v4.compiler.STException: 上下文 [匿名] 44:6 没有此类属性或无法访问: java.lang.String.truthy 原因: org.stringtemplate.v4.misc.STNoSuchPropertyException:没有这样的 属性:java.lang.String.truthy 在 org.stringtemplate.v4.misc.ObjectModelAdaptor.throwNoSuchProperty(ObjectModelAdaptor.java:167) 在 org.stringtemplate.v4.misc.ObjectModelAdaptor.getProperty(ObjectModelAdaptor.java:89) 在 org.stringtemplate.v4.Interpreter.getObjectProperty(Interpreter.java:1200) 在 org.stringtemplate.v4.Interpreter._exec(Interpreter.java:210) 在 org.stringtemplate.v4.Interpreter.exec(Interpreter.java:145) 在 org.stringtemplate.v4.ST.write(ST.java:427) 在 org.stringtemplate.v4.ST.render(ST.java:497) 在 org.clapper.scalasti.ST.render(ST.scala:285) 在 giter8.G8$.applyTemplate(g8.scala:102) 在 giter8.G8$.write(g8.scala:154) 在 giter8.G8$.write(g8.scala:138) 在 giter8.G8$.$anonfun$writeTemplates$3(g8.scala:396) 在 scala.util.control.Exception$Catch.$anonfun$opt$1(Exception.scala:242) 在 scala.util.control.Exception$Catch.apply(Exception.scala:224) 在 scala.util.control.Exception$Catch.opt(Exception.scala:242) 在 giter8.G8$.$anonfun$writeTemplates$2(g8.scala:396) 在 scala.collection.immutable.Stream.foreach(Stream.scala:530) 在 giter8.G8$.writeTemplates(g8.scala:386) 在 giter8.G8$.$anonfun$applyT$1(g8.scala:257) 在 scala.util.Either$RightProjection.flatMap(Either.scala:702) 在 giter8.G8$.applyT(g8.scala:249) 在 giter8.G8$.fromDirectory(g8.scala:62) 在 giter8.JgitHelper$.$anonfun$run$3(JgitHelper.scala:64) 在 scala.util.Either$RightProjection.flatMap(Either.scala:702) 在 giter8.JgitHelper$.run(JgitHelper.scala:63) 在 giter8.Giter8.$anonfun$run$2(giter8.scala:34) 在 scala.Option.map(Option.scala:146) 在 giter8.Giter8.run(giter8.scala:33) 在 sbtgiter8resolver.Giter8TemplateResolver.run(Giter8TemplateResolver.scala:31) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 sbt.TemplateCommandUtil$.call(TemplateCommand.scala:100) 在 sbt.TemplateCommandUtil$.runTemplate(TemplateCommand.scala:78) 在 sbt.TemplateCommandUtil$.$anonfun$run$1(TemplateCommand.scala:58) at sbt.TemplateCommandUtil$.$anonfun$run$1$adapted(TemplateCommand.scala:54) 在 scala.collection.LinearSeqOptimized.find(LinearSeqOptimized.scala:111) 在 scala.collection.LinearSeqOptimized.find$(LinearSeqOptimized.scala:108) 在 scala.collection.immutable.List.find(List.scala:86) 在 sbt.TemplateCommandUtil$.run(TemplateCommand.scala:54) 在 sbt.TemplateCommandUtil$.runTemplate(TemplateCommand.scala:41) 在 sbt.TemplateCommandUtil$.$anonfun$templateCommand$2(TemplateCommand.scala:24) 在 sbt.Command$.$anonfun$applyEffect$4(Command.scala:134) 在 sbt.Command$.$anonfun$applyEffect$2(Command.scala:130) at sbt.MainLoop$.processCommand(MainLoop.scala:153) 在 sbt.MainLoop$.$anonfun$next$2(MainLoop.scala:136) 在 sbt.State$$anon$1.runCmd$1(State.scala:242) at sbt.State$$anon$1.process(State.scala:248) 在 sbt.MainLoop$.$anonfun$next$1(MainLoop.scala:136) 在 sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16) 在 sbt.MainLoop$.next(MainLoop.scala:136) 在 sbt.MainLoop$.run(MainLoop.scala:129) 在 sbt.MainLoop$.$anonfun$runWithNewLog$1(MainLoop.scala:107) 在 sbt.io.Using.apply(Using.scala:22) 在 sbt.MainLoop$.runWithNewLog(MainLoop.scala:101) 在 sbt.MainLoop$.runAndClearLast(MainLoop.scala:57) 在 sbt.MainLoop$.runLoggedLoop(MainLoop.scala:42) 在 sbt.MainLoop$.runLogged(MainLoop.scala:34) 在 sbt.StandardMain$.runManaged(Main.scala:113) 在 sbt.xMain.run(Main.scala:76) 在 xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109) 在 xsbt.boot.Launch$.withContextLoader(Launch.scala:128) 在 xsbt.boot.Launch$.run(Launch.scala:109) 在 xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35) 在 xsbt.boot.Launch$.launch(Launch.scala:117) 在 xsbt.boot.Launch$.apply(Launch.scala:18) 在 xsbt.boot.Boot$.runImpl(Boot.scala:41) 在 xsbt.boot.Boot$.main(Boot.scala:17) 在 xsbt.boot.Boot.main(Boot.scala)

在 giter8.G8$STErrorHandler.runTimeError(g8.scala:110) 在 giter8.G8$STErrorHandler.runTimeError(g8.scala:105) 在 org.stringtemplate.v4.misc.ErrorManager.runTimeError(ErrorManager.java:137) 在 org.stringtemplate.v4.Interpreter.getObjectProperty(Interpreter.java:1203) 在 org.stringtemplate.v4.Interpreter._exec(Interpreter.java:210) 在 org.stringtemplate.v4.Interpreter.exec(Interpreter.java:145) 在 org.stringtemplate.v4.ST.write(ST.java:427) 在 org.stringtemplate.v4.ST.render(ST.java:497) 在 org.clapper.scalasti.ST.render(ST.scala:285) 在 giter8.G8$.applyTemplate(g8.scala:102) 在 giter8.G8$.write(g8.scala:154) 在 giter8.G8$.write(g8.scala:138) 在 giter8.G8$.$anonfun$writeTemplates$3(g8.scala:396) 在 scala.util.control.Exception$Catch.$anonfun$opt$1(Exception.scala:242) 在 scala.util.control.Exception$Catch.apply(Exception.scala:224) 在 scala.util.control.Exception$Catch.opt(Exception.scala:242) 在 giter8.G8$.$anonfun$writeTemplates$2(g8.scala:396) 在 scala.collection.immutable.Stream.foreach(Stream.scala:530) 在 giter8.G8$.writeTemplates(g8.scala:386) 在 giter8.G8$.$anonfun$applyT$1(g8.scala:257) 在 scala.util.Either$RightProjection.flatMap(Either.scala:702) 在 giter8.G8$.applyT(g8.scala:249) 在 giter8.G8$.fromDirectory(g8.scala:62) 在 giter8.JgitHelper$.$anonfun$run$3(JgitHelper.scala:64) 在 scala.util.Either$RightProjection.flatMap(Either.scala:702) 在 giter8.JgitHelper$.run(JgitHelper.scala:63) 在 giter8.Giter8.$anonfun$run$2(giter8.scala:34) 在 scala.Option.map(Option.scala:146) 在 giter8.Giter8.run(giter8.scala:33) 在 sbtgiter8resolver.Giter8TemplateResolver.run(Giter8TemplateResolver.scala:31) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 sbt.TemplateCommandUtil$.call(TemplateCommand.scala:100) 在 sbt.TemplateCommandUtil$.runTemplate(TemplateCommand.scala:78) 在 sbt.TemplateCommandUtil$.$anonfun$run$1(TemplateCommand.scala:58) at sbt.TemplateCommandUtil$.$anonfun$run$1$adapted(TemplateCommand.scala:54) 在 scala.collection.LinearSeqOptimized.find(LinearSeqOptimized.scala:111) 在 scala.collection.LinearSeqOptimized.find$(LinearSeqOptimized.scala:108) 在 scala.collection.immutable.List.find(List.scala:86) 在 sbt.TemplateCommandUtil$.run(TemplateCommand.scala:54) 在 sbt.TemplateCommandUtil$.runTemplate(TemplateCommand.scala:41) 在 sbt.TemplateCommandUtil$.$anonfun$templateCommand$2(TemplateCommand.scala:24) 在 sbt.Command$.$anonfun$applyEffect$4(Command.scala:134) 在 sbt.Command$.$anonfun$applyEffect$2(Command.scala:130) at sbt.MainLoop$.processCommand(MainLoop.scala:153) 在 sbt.MainLoop$.$anonfun$next$2(MainLoop.scala:136) 在 sbt.State$$anon$1.runCmd$1(State.scala:242) at sbt.State$$anon$1.process(State.scala:248) 在 sbt.MainLoop$.$anonfun$next$1(MainLoop.scala:136) 在 sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16) 在 sbt.MainLoop$.next(MainLoop.scala:136) 在 sbt.MainLoop$.run(MainLoop.scala:129) 在 sbt.MainLoop$.$anonfun$runWithNewLog$1(MainLoop.scala:107) 在 sbt.io.Using.apply(Using.scala:22) 在 sbt.MainLoop$.runWithNewLog(MainLoop.scala:101) 在 sbt.MainLoop$.runAndClearLast(MainLoop.scala:57) 在 sbt.MainLoop$.runLoggedLoop(MainLoop.scala:42) 在 sbt.MainLoop$.runLogged(MainLoop.scala:34) 在 sbt.StandardMain$.runManaged(Main.scala:113) 在 sbt.xMain.run(Main.scala:76) 在 xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109) 在 xsbt.boot.Launch$.withContextLoader(Launch.scala:128) 在 xsbt.boot.Launch$.run(Launch.scala:109) 在 xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35) 在 xsbt.boot.Launch$.launch(Launch.scala:117) 在 xsbt.boot.Launch$.apply(Launch.scala:18) 在 xsbt.boot.Boot$.runImpl(Boot.scala:41) 在 xsbt.boot.Boot$.main(Boot.scala:17) 在 xsbt.boot.Boot.main(Boot.scala)

我对@9​​87654330@ 和sbt-giter8 插件都使用版本0.11.0-M3

我该如何解决这个问题?

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

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

如果我从模板中删除了真实的部分,则项目将从sbt new正确生成


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

【问题讨论】:

  • 你使用的是哪个版本的 sbt?以及如何设置sbt-giter8 插件?
  • 我在 qiestion 中添加了更多细节

标签: sbt giter8


【解决方案1】:

sbt new 内部使用的 giter8 版本是固定的,添加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和这个功能已经恢复了。

【讨论】:

  • 很多用户都在使用那个模板,我不想强​​迫他们安装giter8。现在我只是不会使用条件。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
  • 2019-09-24
  • 2016-10-16
  • 1970-01-01
  • 2014-05-28
  • 2014-12-22
  • 2011-07-23
相关资源
最近更新 更多