From 5556613087d41d07a540c6ab2d29fce2f1c75a18 Mon Sep 17 00:00:00 2001 From: LamGC Date: Tue, 15 Feb 2022 14:06:45 +0800 Subject: [PATCH] =?UTF-8?q?refactor(extension):=20=E6=94=B9=E8=BF=9B=20Ext?= =?UTF-8?q?ensionClassLoader=20=E7=9A=84=E6=9E=84=E9=80=A0=E5=99=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将构造器改进后, 在使用过程中会更加灵活. --- scalabot-app/src/main/kotlin/Extension.kt | 26 +++++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/scalabot-app/src/main/kotlin/Extension.kt b/scalabot-app/src/main/kotlin/Extension.kt index da3468f..e18b7ad 100644 --- a/scalabot-app/src/main/kotlin/Extension.kt +++ b/scalabot-app/src/main/kotlin/Extension.kt @@ -356,15 +356,27 @@ internal object MavenMetaInformationFinder : ExtensionPackageFinder { /** * 扩展包专属的类加载器. * - * 通过为每个扩展包提供专门的加载器, 可防止意外使用其他扩展的类(希望如此). + * 通过为每个扩展包提供专有的加载器, 可防止意外使用其他扩展的类(希望如此). + * @param urls 扩展包资源 Url. */ -internal class ExtensionClassLoader(extensionFile: File) : - URLClassLoader(arrayOf(URL("file:///${extensionFile.canonicalPath}"))) { +internal class ExtensionClassLoader(vararg urls: URL) : + URLClassLoader(urls) { + + /** + * 指定扩展包 File 来创建 ClassLoader. + * @param extensionFile 扩展包文件. + */ + constructor(extensionFile: File) : + this(URL(getUrlString(extensionFile))) val serviceLoader: ServiceLoader = ServiceLoader.load(BotExtensionFactory::class.java, this) + companion object { + private fun getUrlString(extensionFile: File, defaultScheme: String = "file:///"): String { + return when (extensionFile.extension.lowercase()) { + "jar" -> "jar:file:///${extensionFile.canonicalPath}!/" + else -> defaultScheme + extensionFile.canonicalPath + } + } + } } - - - -