猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

sbt のバージョンを 1.5.5 にしたら java.lang.NoSuchMethodError: scala.tools.nsc.Settings.bootclasspath()Lscala/tools/nsc/settings/AbsSettings$AbsSetting;

f:id:yoshiki_utakata:20210815235245p:plain

Scala + Play Framework のプロジェクトで、 sbt のバージョンを 1.3.9 から 1.5.5 にしたところ、以下のエラーが発生しました。

#9 87.82 [error] java.lang.NoSuchMethodError: scala.tools.nsc.Settings.bootclasspath()Lscala/tools/nsc/settings/AbsSettings$AbsSetting;
#9 87.83 [error]    at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$CompilerInstance.compiler$lzycompute(TwirlCompiler.scala:653)
#9 87.83 [error]    at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$CompilerInstance.compiler(TwirlCompiler.scala:628)
#9 87.83 [error]    at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$PresentationCompiler$.<init>(TwirlCompiler.scala:700)
#9 87.83 [error]    at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$PresentationCompiler$.<clinit>(TwirlCompiler.scala)
#9 87.84 [error]    at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$.getFunctionMapping(TwirlCompiler.scala:537)
#9 87.84 [error]    at play.twirl.compiler.TwirlCompiler$.generateCode(TwirlCompiler.scala:429)
#9 87.84 [error]    at play.twirl.compiler.TwirlCompiler$.generateFinalTemplate(TwirlCompiler.scala:487)
#9 87.84 [error]    at play.twirl.compiler.TwirlCompiler$.parseAndGenerateCode(TwirlCompiler.scala:259)
#9 87.84 [error]    at play.twirl.compiler.TwirlCompiler$.compile(TwirlCompiler.scala:200)
#9 87.85 [error]    at play.twirl.sbt.TemplateCompiler$.$anonfun$compile$2(TemplateCompiler.scala:60)
#9 87.85 [error]    at scala.collection.TraversableLike$WithFilter.$anonfun$foreach$1(TraversableLike.scala:985)
#9 87.85 [error]    at scala.collection.immutable.List.foreach(List.scala:431)
#9 87.85 [error]    at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:984)
#9 87.85 [error]    at play.twirl.sbt.TemplateCompiler$.compile(TemplateCompiler.scala:50)
#9 87.86 [error]    at play.twirl.sbt.SbtTwirl$.$anonfun$compileTemplatesTask$1(SbtTwirl.scala:111)
#9 87.86 [error]    at scala.Function1.$anonfun$compose$1(Function1.scala:49)
#9 87.86 [error]    at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
#9 87.86 [error]    at sbt.std.Transform$$anon$4.work(Transform.scala:68)
#9 87.87 [error]    at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
#9 87.87 [error]    at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
#9 87.87 [error]    at sbt.Execute.work(Execute.scala:291)
#9 87.87 [error]    at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
#9 87.87 [error]    at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
#9 87.88 [error]    at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
#9 87.88 [error]    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
#9 87.88 [error]    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
#9 87.88 [error]    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
#9 87.88 [error]    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
#9 87.88 [error]    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
#9 87.89 [error]    at java.lang.Thread.run(Thread.java:748)
#9 87.92 [error] (Compile / twirlCompileTemplates) java.lang.NoSuchMethodError: scala.tools.nsc.Settings.bootclasspath()Lscala/tools/nsc/settings/AbsSettings$AbsSetting;

これに対応する Issue があり、

github.com

Play Framework 2.8.8 からはこの不具合が治っているようです。

Play Framework で利用している sbtTwirl というプラグインが、 sbt 1.5 でエラーになっていたらしく、 sbtTwirl のバージョンアップによって治ったようです。

github.com

github.com