Я использую scalate в качестве шаблонов представления и sbt + jrebel.Но я обнаружил, что если классы, импортированные в scalate, были изменены, нам нужно перезапустить причину, или могут возникнуть ошибки усложнения.
Код довольно прост:
webapp / WEB-INF /web.xml
<web-app version="2.5">
<filter>
<filter-name>TemplateEngineFilter</filter-name>
<filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TemplateEngineFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
src / main / scala / test.scala
package test
object A {
def a() = "AAA"
}
webapp / index.jade
- import test.A._
= a()
Отключить автоматическую перезагрузку пристани
class TestProject(info: ProjectInfo) extends DefaultWebProject(info) {
override val scanDirectories = Nil
}
Затем начните причал:
> sbt
> jetty-run
> ~prepare-webapp
Посетите домашнюю страницу:
http://localhost:8080/
Правильно отображается:
AAA
Затем я изменяюtest.scala
as:
package test
object A {
def a() = "AAA#######"
}
Посетите страницу еще раз, исправьте:
AAA#######
Затем измените имя метода:
package test
object A {
def b() = "AAA#######"
}
и index.jade
invokeb()
:
- import test.A._
= b()
Посетите снова, покажите ошибку:
Server Error: We're sorry, but something went wrong.
We've been notified about this issue and we'll take a look at it shortly.
Из этого примера мы не знаем, где что-то не так, но в моем другом проекте мы можем увидетьпричина: не удалось скомпилировать index.jade, значение b()
не найдено
Поэтому мне нужно перезапустить причал:
> jetty-restart
Посетите снова, и все идет хорошо.
Как решить эту проблему, или есть ли другиеСпособ работы со Scate без перезапуска?
ОБНОВЛЕНИЕ
После почти 1 недели попыток я должен отказаться.Я перепробовал все решения, которые смог найти, но он все равно не может быть скомпилирован без перезапуска.
Теперь я просто запускаю sbt без jrebel и позволяю jetty перезагружать веб-приложение, когда классы модифицированы (не отслеживать масштабные представления).).На данный момент это занимает от 3 до 5 секунд, что не слишком долго.
Наконец, спасибо за помощь @James