"объектный индекс не является членом пакета views.html" при открытии проекта scala play в scala ide
Я создал игровой проект с игрой 2.3.7
В каталоге проекта я запустил активатор и запустил eclipse
команда для создания файлов проекта затмения.
Когда я иду к затмению (я использую Scala IDE от typesafe Build id: 4.0.0-vfinal-20150119-1023-Typesafe, в моем файле Application.scala есть ошибка:
object index is not a member of package views.html
Что-то не так с моей настройкой? Приложение работает нормально, когда я выполняю run
в приглашении консоли активации.
Спасибо!
РЕДАКТИРОВАТЬ: Добавлен код
package controllers
import play.api._
import play.api.mvc._
object Application extends Controller {
def index = Action {
Ok(views.html.index("Your new application is ready."))
}
}
Ошибка в строке "Ok..".
В представлениях есть файл index.scala.html, и приложение запускает файл, когда я запускаю его из активатора.
10 ответов
Иногда после добавления представления в Play 2.4.x, IntelliJ IDEA иногда путается и абсолютно отказывается от сборки. Даже перестроить проект не удалось:
Это время от времени происходит в IDEA 15. А когда это происходит, командная строка обеспечивает самое быстрое и наиболее надежное исправление:
свт чистый; sbt compile
Это оно! IDEA теперь скомпилирует проект, как и ожидалось.
Обновить:
В редком случае sbt compile
успешно завершен в командной строке, но IntelliJ IDEA 15 по-прежнему выдает ту же ошибку "объект x не является членом", тогда это решило путаницу IDEA:
Меню Файл:
Другие решения не работают для меня. Некоторые из них будут давать мне другие ошибки, некоторые будут очищать вкладку "Проблемы", но оставят меня с красным загогулином под views.html.index
и автозаполнение не будет работать с шаблонами scala.html.
В итоге получилось открыть свойства проекта, перейти к Java Build Path > Source
и добавьте оба следующих каталога:
target/scala-2.11/src_managed/main
target/scala-2.11/twirl/main
Если вы только делаете target/scala-2.11/twirl/main
тогда вы пропустите файлы классов, сгенерированные из conf
каталог.
В Scala IDE 4.0.0 считает, что в готовой программе Play Framework 2.3.7 есть ошибки, решение которых вы можете найти (вкратце: добавление target/scala-2.11/twirl/main
папку к пути компиляции), попробуйте.
У меня такая же проблема. я добавил target/scala-2.x/classes
а также target/scala-2.x/classes_managed
на мой путь сборки Java и Eclipse перестал жаловаться.
Добавление target/scala-2.11/twirl/main
который имеет views.html
пакет для источника исправлен для меня.
У меня была та же проблема при запуске Play 2.4.0-RC1 с использованием макета SBT по умолчанию (disablePlugins(PlayLayoutPlugin)
) и решил это, добавив в build.sbt
:
sourceDirectories in (Compile, TwirlKeys.compileTemplates) :=
(unmanagedSourceDirectories in Compile).value
Ответ @brent-foust работал на меня, но только на начальном этапе. Каждый раз, когда я перестраивал проект изнутри IDEA, я получал изнутри ошибки "не найдено: маршруты" target\scala-2.11\twirl\main\views\html\main.template.scala
пока я не выполнил обходное решение Brent снова.
В конце концов я обнаружил, что решение этой проблемы заключается в изменении строки в файле.iml с
<excludeFolder url="file://$MODULE_DIR$/target/scala-2.11/src_managed/main" />
в
<sourceFolder url="file://$MODULE_DIR$/target/scala-2.11/src_managed/main" isTestSource="false" />
Я не знаю, каковы долгосрочные последствия этого, но это исправило эту проблему. Некоторые из других аналогичных проблем, упомянутых выше, также можно исправить, применив такое же изменение к другим папкам, перечисленным в.iml.
Я перепробовал все решения без положительного результата.
Итак, я пошел вPreferences > Build, Execution, Deployment > Build Tools > sbt
и проверил Use sbt shell
для импорта и сборки.
Это позволяет кнопке компиляции в intelliJ компилироваться с оболочкой sbt. Я думаю, что в любом случае это лучше, поскольку сервер сборки или что-то подобное будет компилироваться таким же образом, а не как intelliJ.
По сути, нам нужен способ поместить скомпилированные классы в путь, чтобы это работало.
Я сделал следующее, чтобы это исправить. Поскольку проекты компилируются в target
каталог. Я пошел в Project Properties
-> Java Build Path и добавил несколько папок, которые выглядят так,
цель /scala-2.12/ маршруты / главная цель /scala-2.12/ вертеть цель /scala-2.12/ вертеть / главная
Теперь я не хочу, чтобы вы предполагали, что у вас будут именно эти папки и в вашем случае. Это зависит от настроек вашего проекта. Но вы должны добавить папки внутри папки target/scala-2.x.
Для меня при импорте проекта в intellij, удостоверившись, что я "проверил", флажок "auto import" сделал свое дело.
1) Добавьте следующую строку в ваш файл sbt.build:
EclipseKeys.preTasks := Seq(compile in Compile)
2) Добавьте следующую строку в файл plugins.sbt в папке проекта:
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.1.0")
3) Запустите команду "eclipse" изнутри sbt
как объяснено в документации игровой среды: