diff --git a/mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/.nested-module.txt b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/.nested-module.txt new file mode 100644 index 000000000..e69de29bb diff --git a/mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/resources/mvn.txt b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/resources/mvn.txt new file mode 100644 index 000000000..5c0c98f7c --- /dev/null +++ b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/resources/mvn.txt @@ -0,0 +1 @@ +net.mamoe.consoleit.issue2141:javax-xml:1.0.0 diff --git a/mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/src/javax/xml/parsers/SAXParser.kt b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/src/javax/xml/parsers/SAXParser.kt new file mode 100644 index 000000000..341a7fffe --- /dev/null +++ b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/module-jdk-module/src/javax/xml/parsers/SAXParser.kt @@ -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 diff --git a/mirai-console/backend/integration-test/testers/never-override-jdk-modules/resources/META-INF/services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/resources/META-INF/services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin new file mode 100644 index 000000000..c0aef6f16 --- /dev/null +++ b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/resources/META-INF/services/net.mamoe.mirai.console.plugin.jvm.JvmPlugin @@ -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 \ No newline at end of file diff --git a/mirai-console/backend/integration-test/testers/never-override-jdk-modules/src/NeverOverrideJdkModules.kt b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/src/NeverOverrideJdkModules.kt new file mode 100644 index 000000000..c68c86e83 --- /dev/null +++ b/mirai-console/backend/integration-test/testers/never-override-jdk-modules/src/NeverOverrideJdkModules.kt @@ -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"), + ) + } +} diff --git a/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginClassLoader.kt b/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginClassLoader.kt index dc1405d1e..bc40dc9fd 100644 --- a/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginClassLoader.kt +++ b/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginClassLoader.kt @@ -94,6 +94,10 @@ internal class DynLibClassLoader : URLClassLoader { } catch (ignored: ClassNotFoundException) { } } + try { + return Class.forName(name, false, JavaSystemPlatformClassLoader) + } catch (ignored: ClassNotFoundException) { + } return null } }