NoSuchMethodError с Play scala.tools.nsc.Settings.bootclasspath()

Не удается запустить сервер Play, получая NoSuchMethodError

Сообщение об ошибке:

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)

[error] java.lang.NoSuchMethodError: 'scala.tools.nsc.settings.AbsSettings$AbsSetting scala.tools.nsc.Settings.bootclasspath()'
[error]         at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$CompilerInstance.compiler$lzycompute(TwirlCompiler.scala:503)
[error]         at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$CompilerInstance.compiler(TwirlCompiler.scala:481)
[error]         at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$PresentationCompiler$.<init>(TwirlCompiler.scala:549)
[error]         at play.twirl.compiler.TwirlCompiler$TemplateAsFunctionCompiler$PresentationCompiler$.<clinit>(TwirlCompiler.scala)

Конфигурация

  1. Apple M1 Монтерей
  2. Скала 2.12.13
  3. сбт 1.6.1
  4. Играть 2.7.9
  5. Java OpenJDK Runtime Environment Corretto-11.0.18.10.1

Уже пробовал:

  1. apple-silicon-m1-playframework-сломан-на-apple-silicon

addSbtPlugin("se.marcuslonnberg" % "sbt-docker" % "1.8.2")
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.8.1")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0") // For passing build information.
addSbtPlugin("io.github.davidmweber" % "flyway-sbt" % "7.4.0")

addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1")


addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.7.9")

addSbtPlugin("com.github.cb372" % "sbt-explicit-dependencies" % "0.2.13")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0")

addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")

addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.10.1")

lazy val insight = (project in file("insight"))
  .enablePlugins(PlayScala, TypeSafeDockerPlugin, BuildInfoPlugin, BashStartScriptPlugin)
  .settings(commonSettings)
  .settings(baseBuildInfoKeys)
  .settings(
Global / cancelable := false,
version := insightVersion,
resolvers += "shibboleth-release" at "https://build.shibboleth.net/nexus/content/repositories/releases", //for openSAML lib
libraryDependencies ++= insightDependencies,
libraryDependencies += scalaOrganization.value % "scala-compiler" % scalaVersion.value,
// automatically import template helpers for templates
TwirlKeys.templateImports ++= Seq(
  "********.utils.Environment",
  "********.models._",
  "controllers._",
  "templateHelpers._",
  "org.joda.time.DateTime"
),

// disable js asset stuff, we manage it on our own
Assets / JsEngineKeys.npmNodeModules := Nil,
TestAssets / JsEngineKeys.npmNodeModules := Nil,
// don't produce docs
Compile / doc / sources := Seq.empty,
Compile / packageDoc / publishArtifact := false,
PlayKeys.playMonitoredFiles := {
  val isUsingWebpackDevServer = Option(System.getenv("WEBPACK_DEV_SERVER_PORT")).isDefined
  val filesList = PlayKeys.playMonitoredFiles.value
  if (isUsingWebpackDevServer) {
    (filesList --- baseDirectory.value / "public").get
  } else {
    filesList
  }
},
// run webpack when doing dist as well for staging and production
webpackDistTask := {
  val exitCode =
    Process("node" :: "node_modules/webpack/bin/webpack.js" :: "--progress" :: "--colors" :: Nil, baseDirectory.value) !

  if (exitCode != 0) {
    // webpack build has an error
    throw new RuntimeException(s"Webpack build error (exit code $exitCode). Check for errors above")
  }

  val versionRegex = "\\.([0-9a-f]*)\\.bundle".r
  val version =
    versionRegex.findFirstMatchIn(IO.readLines(baseDirectory.value / "conf" / "webpack-assets.json")(0)).get.group(1)
  IO.write(baseDirectory.value / "conf" / "version.conf", s"webpack.version=$version".getBytes)
},
dist := (dist dependsOn webpackDistTask).value
  )
  .settings(commonDockerSettings)
  .settings(dockerBuildInsight)
  .dependsOn(knowledge)

Пожалуйста, покажите свои файлы сборки (build.sbt, project/plugins.sbt и т. д.).

Dmytro Mitin 09.04.2023 06:41

Спасибо за plugins.sbt. Пожалуйста, добавьте build.sbt тоже.

Dmytro Mitin 09.04.2023 07:07

Он довольно большой и содержит конфиденциальную информацию, какая часть будет наиболее полезной?

aleks.n.fedorov 09.04.2023 07:09

Часть, которая воспроизводит проблему. Вы можете попробовать удалить проприетарную часть и проверить, сохраняется ли проблема. Если это так, вы можете добавить непатентованную часть.

Dmytro Mitin 09.04.2023 07:14

На всякий случай Как создать минимальный воспроизводимый пример

Dmytro Mitin 09.04.2023 07:18

Да, похоже, каков план лечения?

aleks.n.fedorov 09.04.2023 07:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
129
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Класс scala.tools.nsc.Settings (метод bootclasspath) взят из scala-compiler

https://mvnrepository.com/artifact/org.scala-lang/scala-compiler/2.12.13

Попробуйте добавить

libraryDependencies += scalaOrganization.value % "scala-compiler" % scalaVersion.value

к вашему build.sbt.

Это что-то меняет для вас?


На самом деле мне удалось воспроизвести java.lang.NoSuchMethodError: 'scala.tools.nsc.settings.AbsSettings$AbsSetting scala.tools.nsc.Settings.bootclasspath() даже при свежей установке Play sbt new playframework/play-scala-seed.g8 (Play 2.7.9, Scala 2.12.13, jdk-17.0.5). Доступ к http://localhost:9000/ приводит к немного другой трассировке стека в моем случае https://gist.github.com/DmytroMitin/a36fc85966bfcf1481d7ec0b516ffc9f

Трассировка стека даже ближе к вашей с sbt вне IntelliJ: at play.twirl.compiler...https://gist.github.com/DmytroMitin/9f6c3982bb7bd0c715c86f4c4a61a6eb


Play 2.8.0 — это первая версия, в которой мы официально поддерживаем Java 11. Play, его отдельные модули, образцы и начальные числа протестированы на соответствие AdoptOpenJDK 8 и 11. Мы продолжаем поддерживать Java 8 в качестве версии по умолчанию.

https://www.playframework.com/documentation/2.8.19/Highlights28#Java-11-support

Так что Play 2.7 может не работать с Java 11.

Попробуйте обновиться до Play 2.8. Проблема, кажется, не воспроизводится там.


Еще один вариант (если вы хотите остаться на Play 2.7) — понизить версию sbt до 1.3.x (изменить project/build.properties).

https://github.com/sbt/sbt/issues/6400

https://www.reddit.com/r/scala/comments/pjhex0/error_javalangnosuchmethoderror/

Дело похоже в конфликте версий Play и sbt. Точнее, между twirl-compiler и scala-compiler. twirl-compiler, похоже, не соблюдает патч версии 2.12.x scala-compiler. Различные версии патчей 2.12.x (для разных x) scala-compiler обычно бинарно несовместимы, потому что это не API, как scala-library или scala-reflect. Но twirl-compiler — это просто _2.12, а не _2.12.x.

[IJ][playdemo] $ projects
[info] In file:/playdemo/
[info]   * root
[IJ][playdemo] $ reload plugins
[IJ]projects
[info] In file:/playdemo/project/
[info]   * project
[IJ]dependencyTree
[info] default:project:0.1.0-SNAPSHOT
[info]   +-com.typesafe.play:sbt-plugin:2.7.9
[info]   | +-...
[info]   | +-com.typesafe.sbt:sbt-twirl:1.4.2
[info]   | | +-com.typesafe.play:twirl-compiler_2.12:1.4.2 [S]
[info]   | |   +-com.typesafe.play:twirl-api_2.12:1.4.2 [S]
[info]   | |   | +-...
[info]   | |   | 
[info]   | |   +-com.typesafe.play:twirl-parser_2.12:1.4.2 [S]
[info]   | |   +-org.scala-lang:scala-compiler:2.12.15 [S]
[info]   | |     +-...
[info]   | |     +-org.scala-lang:scala-reflect:2.12.15 [S]

(запуск команды sbt на уровне мета-сборки)

Возможно это можно отладить как в SBT выдает java.lang.NullPointerException при попытке запустить spark...

Никакой разницы, тот же результат

aleks.n.fedorov 09.04.2023 07:01

Работает при понижении версии sbt до 1.3.12

aleks.n.fedorov 09.04.2023 16:52

Другие вопросы по теме