Closed heyhey123-git closed 2 months ago
建议不要使用 TabooLib 6.2,你可能需要对 TabooLib 作一些修改才能保证一些模块的正常使用,很麻烦的。
建议不要使用 TabooLib 6.2,你可能需要对 TabooLib 作一些修改才能保证一些模块的正常使用,很麻烦的。
version { taboolib = "6.1.2-beta10" }
没有,用的最新release那个版本
建议不要使用 TabooLib 6.2,你可能需要对 TabooLib 作一些修改才能保证一些模块的正常使用,很麻烦的。
version { taboolib = "6.1.2-beta10" }
没有,用的最新release那个版本
噢噢,看错了,不好意思
数据库模块本身就不会随玩家数据库模块打包,需要你自行打包。
你的 taboolib 用的是 6.1.2-beta10,数据库模块就要使用对应版本,不要使用其他版本,可能会有错误。 database-sql 是 6.2 中数据库的名称,6.1 还叫 module-database,你应该使用 DATABASE 这个属性,而不是打包,打包可能会出现问题。
install(
UNIVERSAL,
BUKKIT_ALL,
NMS_UTIL,
EXPANSION_PLAYER_DATABASE,
DATABASE // <--- 这里添加数据库模块
)
问题起因
尝试使用
taboolib-gradle-plugin
引入的install
方法来安装并使用玩家数据库,即EXPANSION_PLAYER_DATABASE
。但在运行测试时发现,若调用的方法涉及到对 sql 数据库的处理,则会抛出NullPointerException
或NoClassDefFoundError
等等异常。复现问题
安装
EXPANSION_PLAYER_DATABASE
模块,并执行加载数据库、加载玩家数据等操作即可复现。示例
这段来自 DatabaseHandler.kt 的代码是上述示例所调用的。发现此处调用了一个
Database(TypeSQLite(file))
。获取TypeSQLite
的实例时又调用了getHost()
这个扩展方法,而这个方法定义在了未被打包的模块database-sql
的FileToHost.kt
里,因此最终抛出了NoClassDefFoundError
。 尽管抛出了异常,上述代码的warning
一个都没执行,也没有自动停用这个插件。解决办法(暂时)
往依赖里加一行
taboo("io.izzel.taboolib:database-sql:6.2.0-beta3-dev")
,手动将这个缺失的模块打包即可解决。发现这个模块有且仅有上面一个版本,估计是打包时找不到对应版本的模块就没有打包。环境版本
plugins { java id("io.izzel.taboolib") version "2.0.13" id("org.jetbrains.kotlin.jvm") version "1.9.22" kotlin("plugin.serialization") version "1.9.22" }
taboolib { relocate("kotlinx.serialization", "kotlinx.serialization163") env { install( UNIVERSAL, BUKKIT_ALL, NMS_UTIL, EXPANSION_PLAYER_DATABASE ) } version { taboolib = "6.1.2-beta10" } }
repositories { mavenCentral() }
dependencies { compileOnly("ink.ptms.core:v12004:12004:mapped") compileOnly("ink.ptms.core:v12004:12004:universal") implementation(kotlin("stdlib")) implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") taboo("org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.3") { isTransitive = false } taboo("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") { isTransitive = false } compileOnly(fileTree("libs")) }
kotlin { sourceSets.all { languageSettings { languageVersion = "2.0" } } }
tasks.withType {
options.encoding = "UTF-8"
}
tasks.withType {
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs = listOf("-Xjvm-default=all")
}
}
tasks.withType {
options.encoding = "UTF-8"
}
configure {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}