Hard linking jdk builtin modules; fix #2141; fix #2126

- Not allow override jdk modules
This commit is contained in:
Karlatemp 2022-07-08 13:08:34 +08:00
parent 0f64513db5
commit 1be39eeb0a
No known key found for this signature in database
GPG Key ID: BA173CA2B9956C59
6 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1 @@
net.mamoe.consoleit.issue2141:javax-xml:1.0.0

View File

@ -0,0 +1,12 @@
/*
* Copyright 2019-2022 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
package javax.xml.parsers
public class SAXParser

View File

@ -0,0 +1,10 @@
#
# Copyright 2019-2022 Mamoe Technologies and contributors.
#
# 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
# Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
#
# https://github.com/mamoe/mirai/blob/dev/LICENSE
#
neveroverridejdkmodules.NeverOverrideJdkModules

View File

@ -0,0 +1,46 @@
/*
* Copyright 2019-2022 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
package neveroverridejdkmodules
import net.mamoe.console.integrationtest.assertClassSame
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
public object NeverOverrideJdkModules : KotlinPlugin(
JvmPluginDescription("net.mamoe.console.itest.never-override-jdk-modules", "0.0.0")
) {
init {
jvmPluginClasspath.downloadAndAddToPath(
jvmPluginClasspath.pluginSharedLibrariesClassLoader,
listOf("net.mamoe.consoleit.issue2141:javax-xml:1.0.0")
)
}
@Suppress("Since15")
override fun onEnable() {
val platformC = ClassLoader.getSystemClassLoader().loadClass("javax.xml.parsers.SAXParser")
assertClassSame(
platformC,
Class.forName("javax.xml.parsers.SAXParser"),
)
assertClassSame(
platformC,
jvmPluginClasspath.pluginClassLoader.loadClass("javax.xml.parsers.SAXParser"),
)
assertClassSame(
platformC,
jvmPluginClasspath.pluginIndependentLibrariesClassLoader.loadClass("javax.xml.parsers.SAXParser"),
)
assertClassSame(
platformC,
jvmPluginClasspath.pluginSharedLibrariesClassLoader.loadClass("javax.xml.parsers.SAXParser"),
)
}
}

View File

@ -94,6 +94,10 @@ internal class DynLibClassLoader : URLClassLoader {
} catch (ignored: ClassNotFoundException) {
}
}
try {
return Class.forName(name, false, JavaSystemPlatformClassLoader)
} catch (ignored: ClassNotFoundException) {
}
return null
}
}