已解决 请教一下如何使用/src/main/resources下的文件?
-
可能问的问题比较愚蠢。
我是一个新手,之前有过别的语言的开发经验,但是没接触过java和kotlin。最近在尝试kotlin开发mirai插件。
我想使用Ktor做一个静态网页服务。
以下的代码在一般程序下kotlin程序下有效,但是在mirai插件中无法生效。
(文件路径为/src/main/resources/static/index.html)route("/") { static { resource("", "index.html", "static") } }
我kotlin开发经验不足,大概猜测在mirai插件中无法直接使用/src/main/resources下的文件,因此请教一下应该如何读取这样的文件。
-
-
试试
javaClass.classLoader.getResource
? -
你可以让用户额外下载一个资源文件放到插件自己的data文件夹中(./data/插件包名/),然后用这样访问
routing { static("/") { file("/", "${插件入口.dataFolder.absolutePath}/dist/index.html") } // Static plugin. Try to access `/static/index.css` static("/static") { files("${插件入口.dataFolder.absolutePath}/dist/static") } }
-
@Samarium150 这块的资料调查过了,那个是直接获取资源文件的内容,而这里是指定资源文件的路径,似乎不太适合用这个方法。
-
你需要手动指定
classLoader
-
@diyigemt 非常感谢解答。我现在就是采用的这种方式解决的。
但是感觉不是很方便。这样每次部署插件的时候,需要将静态页面和动态页面的文件从resources下先释放到本地路径下再使用。总感觉自己绕了很大的弯路,所以想看看是否有直接使用resources下文件的方法。 -
@cssxsh 非常感谢解答,我目前刚接触java相关的开发,对于classLoader没什么概念,我先去调查一下相关的资料。
-
ApplicationEnvironment 有个属性是 classLoader
你需要 把他调整为插件的 classLoader -
此回复已被删除! -
此回复已被删除! -
@cssxsh 反复折腾了一下午,终于搞定了。感谢大佬提供的思路。
现在提供一下我的做法:
fun startWebServer(){ val env = applicationEngineEnvironment { envConfig() } val webServer = embeddedServer(Netty, env) GlobalScope.launch { webServer.start(true) } } private fun ApplicationEngineEnvironmentBuilder.envConfig() { classLoader = XXXBot::class.java.classLoader module { module() } connector { host = "0.0.0.0" port = 8080 } }
-
-
@sweetymajo 建议搞前后端分离,我是做java的 ,kotilin 也不是很懂。