fix(extension): 在创建扩展对象时捕获异常.

为防止 Factory 抛出异常影响加载, 增强鲁棒性, 所以在创建实例时捕获异常, 并跳过抛出异常的 Factory.
目前还不能解决 Factory 初始化异常的问题, 等 MavenRepositoryFinder 更新后再修复.
This commit is contained in:
LamGC 2022-02-21 11:52:25 +08:00
parent 1b538f7c1f
commit d7b253186e
Signed by: LamGC
GPG Key ID: 6C5AE2A913941E1D

View File

@ -88,9 +88,13 @@ internal class ExtensionLoader(
ExtensionClassLoaderCleaner.getOrCreateExtensionClassLoader(extensionArtifact, extensionFile)
val factories = mutableSetOf<LoadedExtensionEntry>()
for (factory in extClassLoader.serviceLoader) {
try {
val extension =
factory.createExtensionInstance(bot, getExtensionDataFolder(extensionArtifact))
factories.add(LoadedExtensionEntry(extensionArtifact, factory::class.java, extension))
} catch (e: Exception) {
log.error(e) { "创建扩展时发生异常. (ExtArtifact: `$extensionArtifact`, Factory: ${factory::class.java.name})" }
}
}
return factories.toSet()
}