#sbt #scala.js
#sbt #scala.js
Вопрос:
Обратите внимание, что это не ошибка IntelliJ и присутствует при запуске из SBT непосредственно при запуске sbt
в проекте:
C:UsersbrandDocumentsGitHubscalajs-cross-compile-examplebuild.sbt:27: error: type mismatch;
found : sbt.Project
required: sbt.internals.DslEntry
fooJVM.enablePlugins(SbtXjcPlugin)
Я использую канонический пример проекта кросс-компиляции scala-js с двумя измененными строками (на github).
Как вы можете проверить, единственное отличие заключается в том, что я добавил еще один плагин в plugins.sbt:
addSbtPlugin("org.scala-sbt.plugins" % "sbt-xjc" % "0.8")
И я добавил эту строку в конец buid.sbt
:
fooJVM.enablePlugins(SbtXjcPlugin)
По общему признанию, это немного надуманный пример, но у меня есть причины для включения плагинов только для проектов JVM, которые я могу рассмотреть более подробно, если необходимо.
Ответ №1:
Вы не должны ничего вызывать fooJVM
(это объясняется в разделе «Подводные камни» в документации).
Вместо этого используйте jvmConfigure
:
lazy val foo = crossProject.in(file(".")).
// stuff
jvmConfigure(_.enablePlugins(SbtXjcPlugin))
Причина, по которой вам нужно это сделать, заключается в том, что enablePlugins
возвращает новый экземпляр Project
, который был изменен. So foo.jvm
и fooJVM
больше не являются одним и тем же проектом.
Однако, как вы, вероятно, заметили, сбой вашего файла сборки происходит не из-за этого: в вашем конкретном случае сборка завершается неудачно, потому что sbt не допускает «голых» операторов, подобных этому. Это имеет смысл, поскольку они ничего не делают по той же причине: enablePlugins
возвращает новый Project
с включенным плагином, но не изменяет получателя.
Комментарии:
1. Спасибо! Я думаю, что это должно быть
jvmConfigure
и нетconfigureJvm
, но тот факт, что вы ввели это из памяти, еще более впечатляет новичка SBT даже с опечаткой!2. Хахахахахахаха, так и должно быть
jvmConfigure
… Вы знаете, особенность заключается в следующем: (1) У меня была открыта документация (2) Я написал этот код.