mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-05 18:44:42 +08:00
Resources resolving
This commit is contained in:
parent
d6f4e2e567
commit
51c8684e22
@ -0,0 +1 @@
|
||||
service-loader-impl
|
@ -0,0 +1 @@
|
||||
service-loader-typedef
|
@ -0,0 +1 @@
|
||||
from plugin
|
@ -0,0 +1 @@
|
||||
from 2nd plugin
|
@ -15,6 +15,8 @@ import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
|
||||
import net.mamoe.mirai.utils.info
|
||||
import java.util.*
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertNull
|
||||
|
||||
|
||||
internal class PS : ServiceTypedef
|
||||
@ -32,9 +34,37 @@ internal object PMain : KotlinPlugin(JvmPluginDescription("net.mamoe.console.ite
|
||||
services.forEach { service ->
|
||||
logger.info { "Service: $service" }
|
||||
}
|
||||
assertEquals(mutableListOf(
|
||||
"net.mamoe.console.integrationtest.mod.serviceimpl.ServiceImpl",
|
||||
"net.mamoe.console.itest.serviceloader.ndep.PS",
|
||||
), services)
|
||||
assertEquals(
|
||||
mutableListOf(
|
||||
"net.mamoe.console.integrationtest.mod.serviceimpl.ServiceImpl",
|
||||
"net.mamoe.console.itest.serviceloader.ndep.PS",
|
||||
), services
|
||||
)
|
||||
assertEquals(
|
||||
"from 2nd plugin",
|
||||
javaClass.getResourceAsStream("/test-res.txt")!!.reader().use { it.readText() }.trim(),
|
||||
)
|
||||
val tstRes = javaClass.classLoader.getResources("test-res.txt").asSequence().onEach {
|
||||
println(it)
|
||||
}.toMutableList()
|
||||
// /service-loader-2dep-plugin-0.0.0.jar!/test-res.txt
|
||||
// /service-loader-0.0.0.jar!/test-res.txt
|
||||
// /module-service-loader-typedef-0.0.0.jar!/test-res.txt
|
||||
// /module-service-loader-impl-0.0.0.jar!/test-res.txt
|
||||
assertEquals(4, tstRes.size)
|
||||
|
||||
assertNotNull(javaClass.getResource("/net/mamoe/console/it/psl/PluginSharedLib.class").also {
|
||||
println(it)
|
||||
})
|
||||
assertEquals(
|
||||
1,
|
||||
javaClass.classLoader.getResources("net/mamoe/console/it/psl/PluginSharedLib.class")
|
||||
.asSequence().toList()
|
||||
.also {
|
||||
println(it)
|
||||
}.size
|
||||
)
|
||||
assertNull(javaClass.getResource("/net/mamoe/mirai/console/MiraiConsole.class"))
|
||||
assertNull(javaClass.getResource("/net/mamoe/mirai/Bot.class"))
|
||||
}
|
||||
}
|
@ -36,5 +36,17 @@ internal object PMain : KotlinPlugin(JvmPluginDescription("net.mamoe.console.ite
|
||||
logger.info { "Service: $service" }
|
||||
}
|
||||
assertEquals(mutableListOf("net.mamoe.console.integrationtest.mod.serviceimpl.ServiceImpl"), services)
|
||||
|
||||
assertEquals(
|
||||
"from plugin",
|
||||
javaClass.getResourceAsStream("/test-res.txt")!!.reader().use { it.readText() }.trim(),
|
||||
)
|
||||
val tstRes = javaClass.classLoader.getResources("test-res.txt").asSequence().onEach {
|
||||
println(it)
|
||||
}.toMutableList()
|
||||
// /service-loader-0.0.0.jar!/test-res.txt
|
||||
// /module-service-loader-typedef-0.0.0.jar!/test-res.txt
|
||||
// /module-service-loader-impl-0.0.0.jar!/test-res.txt
|
||||
assertEquals(3, tstRes.size)
|
||||
}
|
||||
}
|
||||
|
@ -301,8 +301,13 @@ internal class JvmPluginClassLoaderN : URLClassLoader {
|
||||
}
|
||||
src.add(pluginIndependentCL.getResources(name))
|
||||
|
||||
val resolved = mutableSetOf<URL>()
|
||||
src.forEach { nested -> nested.iterator().forEach { resolved.add(it) } }
|
||||
val resolved = mutableListOf<URL>()
|
||||
src.forEach { nested ->
|
||||
nested.iterator().forEach { url ->
|
||||
if (url !in resolved)
|
||||
resolved.add(url)
|
||||
}
|
||||
}
|
||||
|
||||
return Collections.enumeration(resolved)
|
||||
}
|
||||
@ -312,6 +317,9 @@ internal class JvmPluginClassLoaderN : URLClassLoader {
|
||||
|
||||
if (name.startsWith("META-INF/mirai-console-plugin/"))
|
||||
return findResources(name)
|
||||
// Avoid loading duplicated mirai-console plugins
|
||||
if (name.startsWith("META-INF/services/net.mamoe.mirai.console.plugin."))
|
||||
return findResources(name)
|
||||
|
||||
return getRes(name, true)
|
||||
}
|
||||
@ -320,6 +328,10 @@ internal class JvmPluginClassLoaderN : URLClassLoader {
|
||||
name ?: return null
|
||||
if (name.startsWith("META-INF/mirai-console-plugin/"))
|
||||
return findResource(name)
|
||||
// Avoid loading duplicated mirai-console plugins
|
||||
if (name.startsWith("META-INF/services/net.mamoe.mirai.console.plugin."))
|
||||
return findResource(name)
|
||||
|
||||
findResource(name)?.let { return it }
|
||||
// parent: ctx.sharedLibrariesLoader
|
||||
sharedLibrariesLogger.getResource(name)?.let { return it }
|
||||
|
Loading…
Reference in New Issue
Block a user