From 1110a6f3fa400b3bc0b6e43acecac548d33537d9 Mon Sep 17 00:00:00 2001 From: Karlatemp Date: Wed, 22 Jun 2022 17:43:09 +0800 Subject: [PATCH] Fix private dependencies resolving; fix #2108 --- .../module-private-issue2108/.nested-module.txt | 0 .../module-private-issue2108/resources/mvn.txt | 1 + .../module-private-issue2108/src/PrivateModule.kt | 13 +++++++++++++ .../second-plugin/build.gradle.kts | 1 + .../second-plugin/src/PDepDependOnDepSec.kt | 12 ++++++++++++ .../src/PDepDependOnDep.kt | 4 ++++ .../src/internal/plugin/JvmPluginClassLoader.kt | 8 +++++--- 7 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/.nested-module.txt create mode 100644 mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/resources/mvn.txt create mode 100644 mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/src/PrivateModule.kt diff --git a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/.nested-module.txt b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/.nested-module.txt new file mode 100644 index 000000000..e69de29bb diff --git a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/resources/mvn.txt b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/resources/mvn.txt new file mode 100644 index 000000000..3332fef33 --- /dev/null +++ b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/resources/mvn.txt @@ -0,0 +1 @@ +net.mamoe.consoleit.issue2108:private-module:1.0.0 diff --git a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/src/PrivateModule.kt b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/src/PrivateModule.kt new file mode 100644 index 000000000..0128f53e3 --- /dev/null +++ b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/module-private-issue2108/src/PrivateModule.kt @@ -0,0 +1,13 @@ +/* + * 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 issue2108 + +public object PrivateModule { + public fun stack(): Throwable = Throwable("Stack trace") +} diff --git a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/second-plugin/build.gradle.kts b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/second-plugin/build.gradle.kts index 464918833..e6a6e82e2 100644 --- a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/second-plugin/build.gradle.kts +++ b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/second-plugin/build.gradle.kts @@ -24,6 +24,7 @@ kotlin { dependencies { api(project(":mirai-console.integration-test")) api(parent!!.project("module-modb")) + api(parent!!.project("module-private-issue2108")) } tasks.getByName("jar", Jar::class) { diff --git a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/second-plugin/src/PDepDependOnDepSec.kt b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/second-plugin/src/PDepDependOnDepSec.kt index b4eebba3a..10fbebf28 100644 --- a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/second-plugin/src/PDepDependOnDepSec.kt +++ b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/second-plugin/src/PDepDependOnDepSec.kt @@ -11,6 +11,7 @@ package pdepdep2054sec import issue2054.modulea.ModuleA import issue2054.moduleb.ModuleB +import issue2108.PrivateModule import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin import net.mamoe.mirai.utils.info @@ -26,10 +27,21 @@ public object PDepDependOnDepSec : KotlinPlugin( jvmPluginClasspath.pluginIndependentLibrariesClassLoader, listOf("net.mamoe.consoleit.issue2054:modb:1.0.0") ) + jvmPluginClasspath.downloadAndAddToPath( + jvmPluginClasspath.pluginIndependentLibrariesClassLoader, + listOf("net.mamoe.consoleit.issue2108:private-module:1.0.0") + ) assertSame(ModuleA, ModuleB.getModuleA) logger.info { "issue 2054" } ModuleB.act { ModuleA.act { logger.info(Throwable("Stack trace")) } } + + logger.info("issue 2108", PrivateModule.stack()) + assertSame( + jvmPluginClasspath.pluginIndependentLibrariesClassLoader, + PrivateModule.javaClass.classLoader, + "Failed to load private module from " + jvmPluginClasspath.pluginIndependentLibrariesClassLoader + ) } } diff --git a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/src/PDepDependOnDep.kt b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/src/PDepDependOnDep.kt index d1142e7ae..dd2312c4e 100644 --- a/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/src/PDepDependOnDep.kt +++ b/mirai-console/backend/integration-test/testers/plugin-dep-dependon-dep-issue-2054/src/PDepDependOnDep.kt @@ -20,5 +20,9 @@ public object PDepDependOnDep : KotlinPlugin( jvmPluginClasspath.pluginSharedLibrariesClassLoader, listOf("net.mamoe.consoleit.issue2054:moda:1.0.0") ) + jvmPluginClasspath.downloadAndAddToPath( + jvmPluginClasspath.pluginIndependentLibrariesClassLoader, + listOf("net.mamoe.consoleit.issue2108:private-module:1.0.0") + ) } } 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 959dc18f0..dc1405d1e 100644 --- a/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginClassLoader.kt +++ b/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginClassLoader.kt @@ -247,7 +247,6 @@ internal class JvmPluginClassLoaderN : URLClassLoader { dependency: String ): Boolean { if (dependency in sharedClLoadedDependencies) return true - if (dependency in privateClLoadedDependencies) return true return dependencies.any { it.containsSharedDependency(dependency) } } @@ -288,8 +287,11 @@ internal class JvmPluginClassLoaderN : URLClassLoader { if (dependencies.isEmpty()) return val results = ctx.downloader.resolveDependencies( dependencies, ctx.sharedLibrariesFilter, - DependencyFilter { node, _ -> - return@DependencyFilter !containsSharedDependency(node.artifact.depId()) + DependencyFilter filter@{ node, _ -> + val depid = node.artifact.depId() + if (containsSharedDependency(depid)) return@filter false + if (depid in privateClLoadedDependencies) return@filter false + return@filter true }) val files = results.artifactResults.mapNotNull { result -> result.artifact?.let { it to it.file }