2017-09-14 50 views
3

试图利用自动模块重新加载功能(如描述here),但不幸的是文档不太有用。我们如何使用自动重新加载?

它说要使用配置,但配置page是空的。

我相信你可以在模块的“观察”名单传递到embeddedServer()呼叫从this page,但是当我做,我得到以下异常:Module function provided as lambda cannot be unlinked for reload

所以它不会让你传入一个lambda作为应用程序模块,但是我不知道如何在访问Application方法(例如routing())时避免这样做。

有没有人能够最近自动重新加载工作? 如果是这样,怎么样?

回答

4

Lambda可能具有从包含函数捕获的状态,因此无法重新加载 - 无法恢复捕获的状态。你必须提取应用到这样一个单独的函数:

fun Application.module() { 
    install(CallLogging) 
    install(Routing) { 
     get("/") { 
     call.respondText("""Hello, world!<br><a href="/bye">Say bye?</a>""", ContentType.Text.Html) 
     } 
    … 
    } 
} 

然后用函数的引用启动它:

embeddedServer(Jetty, watchPaths = listOf("embedded"), module = Application::module).start() 
相关问题