蛟龙

Results 6 comments of 蛟龙

Is anybody there?

## 一个问题 RuntimeEnv: ```Java // 在非隔离模式下检查 Kotlin 环境 if (!PrimitiveSettings.IS_ISOLATED_MODE) { // 加载 Kotlin 环境 if (!KOTLIN_VERSION.equals("null") && !TabooLib.isKotlinEnvironment()) { ENV.loadDependency("org.jetbrains.kotlin:kotlin-stdlib:" + KOTLIN_VERSION, rel); } // 加载 Kotlin Coroutines 环境...

> 使用沙盒本就是为了避免版本冲突的问题,如果还能直接访问岂不是变成弱智 这个就是`ClassLoaderProvider`的用处了,对包名进行过滤处理,仅通过插件包下的类,毕竟不同版本的库总是要区分的

> 当使用skipKotlin后,我无法手动将kotlin依赖打包(taboo指令不生效),会出现`Caused by: java.lang.ClassNotFoundException: kotlinnull.LazyThreadSafetyMode`的问题,导致整个插件都无法正常工作 要么你就启用isolated加载方式,不重定向Kotlin 要么你就重定向Kotlin: ``` // Kotlin Version val kotlinVersion = "1.9.20" // Escape Function val String.escapedVersion get() = this.replace(Regex("[._-]"), "") // Relocate (With ShadowJar) relocate("kotlin.", "kotlin${kotlinVersion.escapedVersion}.")...

上面那个我是用[ShadowJar](https://github.com/johnrengelman/shadow)打包的,若要使用[taboolib-gradle-plugin](https://github.com/TabooLib/taboolib-gradle-plugin)打包Kotlin标准库,貌似就没法排除掉`跳过重定向的Kotlin类`,正如你所说,relocate貌似并不能接受一个lambda函数来执行exclude, 所以还是建议使用ShadowJar来帮助打包插件 ``` plugins { id("com.github.johnrengelman.shadow") version "8.1.1" } tasks { // ShadowJar withType { // Options archiveAppendix.set("") archiveClassifier.set("") archiveVersion.set(rootVersion) destinationDirectory.set(file("$rootDir/outs")) // 输出路径自己设置,不设置也行 // Taboolib relocate("taboolib", "$rootGroup.taboolib") relocate("org.tabooproject", "$rootGroup.library") //...

> 实现一种针对其他 tb 插件的访问模式 上述方式其实都是。 无论是通过**反射**,CompatibleClassLoader**托管**其他Taboolib的IsolatedClassLoader,或是**暴力修改parent**(破坏逻辑)从而选择性开放部分类