MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    已解决 请教一下如何使用/src/main/resources下的文件?

    技术交流板块
    5
    12
    701
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • sweetymajo
      sweetymajo 最后由 编辑

      可能问的问题比较愚蠢。
      我是一个新手,之前有过别的语言的开发经验,但是没接触过java和kotlin。最近在尝试kotlin开发mirai插件。
      我想使用Ktor做一个静态网页服务。
      以下的代码在一般程序下kotlin程序下有效,但是在mirai插件中无法生效。
      (文件路径为/src/main/resources/static/index.html)

          route("/") {
              static {
                  resource("", "index.html", "static")
              }
          }
      

      我kotlin开发经验不足,大概猜测在mirai插件中无法直接使用/src/main/resources下的文件,因此请教一下应该如何读取这样的文件。

      X 1 条回复 最后回复 回复 引用 0
      • Topic has been marked as a question  sweetymajo sweetymajo 
      • Samarium150
        Samarium150 童心未泯 最后由 编辑

        试试javaClass.classLoader.getResource?

        sweetymajo 1 条回复 最后回复 回复 引用 0
        • D
          diyigemt 最后由 编辑

          你可以让用户额外下载一个资源文件放到插件自己的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")
              }
            }
          
          sweetymajo 1 条回复 最后回复 回复 引用 0
          • sweetymajo
            sweetymajo @Samarium150 最后由 编辑

            @Samarium150 这块的资料调查过了,那个是直接获取资源文件的内容,而这里是指定资源文件的路径,似乎不太适合用这个方法。

            1 条回复 最后回复 回复 引用 0
            • cssxsh
              cssxsh 最后由 编辑

              你需要手动指定 classLoader

              sweetymajo 1 条回复 最后回复 回复 引用 0
              • sweetymajo
                sweetymajo @diyigemt 最后由 编辑

                @diyigemt 非常感谢解答。我现在就是采用的这种方式解决的。
                但是感觉不是很方便。这样每次部署插件的时候,需要将静态页面和动态页面的文件从resources下先释放到本地路径下再使用。总感觉自己绕了很大的弯路,所以想看看是否有直接使用resources下文件的方法。

                1 条回复 最后回复 回复 引用 0
                • sweetymajo
                  sweetymajo @cssxsh 最后由 编辑

                  @cssxsh 非常感谢解答,我目前刚接触java相关的开发,对于classLoader没什么概念,我先去调查一下相关的资料。

                  1 条回复 最后回复 回复 引用 0
                  • cssxsh
                    cssxsh 最后由 编辑

                    ApplicationEnvironment 有个属性是 classLoader
                    你需要 把他调整为插件的 classLoader

                    sweetymajo 3 条回复 最后回复 回复 引用 0
                    • sweetymajo
                      sweetymajo @cssxsh 最后由 编辑

                      此回复已被删除!
                      1 条回复 最后回复 回复 引用 0
                      • sweetymajo
                        sweetymajo @cssxsh 最后由 编辑

                        此回复已被删除!
                        1 条回复 最后回复 回复 引用 0
                        • sweetymajo
                          sweetymajo @cssxsh 最后由 编辑

                          @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
                              }
                          }
                          
                          1 条回复 最后回复 回复 引用 0
                          • Topic has been marked as solved  sweetymajo sweetymajo 
                          • X
                            xunaiyi @sweetymajo 最后由 编辑

                            @sweetymajo 建议搞前后端分离,我是做java的 ,kotilin 也不是很懂。

                            1 条回复 最后回复 回复 引用 0
                            • 1 / 1
                            • First post
                              Last post
                            Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact