mamoe / mirai

高效率 QQ 机器人支持库
https://mirai.mamoe.net
GNU Affero General Public License v3.0
14.37k stars 2.53k forks source link

插件的 URLClassLoader 没有在 Stop MiraiConsole 之前 close #2465

Open cssxsh opened 1 year ago

cssxsh commented 1 year ago

问题描述

插件的 URLClassLoader 没有在 Stop MiraiConsole 之前 close 无法使用 deleteOnExit 删除插件文件

PS: 这是为了做到插件第三方自动更新

复现

// 获取插件文件 
val source = (plugin::class.java.classLoader as java.net.URLClassLoader)
    .urLs.singleOrNull()
    ?.let { File(it.path) }

// 调用 deleteOnExit
source.deleteOnExit()

mirai-core 版本

2.14.0-RC

bot-protocol

ANDROID_PHONE

其他组件版本

更新的目标插件 https://github.com/Samarium150/mirai-console-lolicon/releases/tag/6.0.6

No response

系统日志

No response

网络日志

No response

补充信息

No response

cssxsh commented 1 year ago
Runtime.getRuntime().addShutdownHook(Thread {
    classLoader.close()
    source.delete()
})

目前的解决方法为构造一个 ShutdownHook,其中包括对 classLoader 的 close