From 628649b52e1f5004d95925e1c1ffd0e1d70d680d Mon Sep 17 00:00:00 2001 From: yanglw Date: Tue, 3 Mar 2026 22:03:54 +0800 Subject: [PATCH] =?UTF-8?q?fix(core.gradle-plugin):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=9C=A8=20Windows=20=E5=B9=B3=E5=8F=B0=E8=BF=9E=E7=BB=AD=20gr?= =?UTF-8?q?adle=20clean=20=E6=89=93=E5=8C=85=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit transform-temp.jar 文件被新创建的 ClassPool 持有访问且没有释放,导致在 Windows 环境下 gradle clean 无法删除 transform-temp.jar 。新的方案是基于 IO 流读取 transform-temp.jar 文件中的 class 文件,并创建 CtClass 导入 ClassPool 中,避免 ClassPool 对 transform-temp.jar 文件持有访问。 --- .../shadow/core/transform_kit/AbstractTransform.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/projects/sdk/core/transform-kit/src/main/kotlin/com/tencent/shadow/core/transform_kit/AbstractTransform.kt b/projects/sdk/core/transform-kit/src/main/kotlin/com/tencent/shadow/core/transform_kit/AbstractTransform.kt index f2d171bb7..a6fac4771 100644 --- a/projects/sdk/core/transform-kit/src/main/kotlin/com/tencent/shadow/core/transform_kit/AbstractTransform.kt +++ b/projects/sdk/core/transform-kit/src/main/kotlin/com/tencent/shadow/core/transform_kit/AbstractTransform.kt @@ -74,7 +74,17 @@ abstract class AbstractTransform( //CtClass在编辑后,其对象中的各种信息,比如superClass并没有更新。 //所以需要重新创建一个ClassPool,加载转换后的类,用于各种转换后的检查。 val debugClassPool = classPoolBuilder.build() - debugClassPool.appendClassPath(mDebugClassJar.absolutePath) + java.util.jar.JarFile(mDebugClassJar).use { jarFile -> + jarFile.entries().iterator().forEach { entry -> + if (!entry.name.endsWith(".class")) { + return@forEach + } + jarFile.getInputStream(entry).use { + // 直接从流创建 CtClass + debugClassPool.makeClass(it) + } + } + } val inputClassNames = allInputCtClass.map { it.name } onCheckTransformedClasses(debugClassPool, inputClassNames) }