【发布时间】: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)
我对@987654330@ 和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 中添加了更多细节