TabooLib / taboolib

Powerful framework for creating multi-platform Minecraft plugin
https://tabooproject.org
MIT License
307 stars 101 forks source link

模块 database-sql 作为依赖时未被正确打包 #447

Closed heyhey123-git closed 2 months ago

heyhey123-git commented 2 months ago

问题起因

尝试使用 taboolib-gradle-plugin 引入的 install 方法来安装并使用玩家数据库,即 EXPANSION_PLAYER_DATABASE 。但在运行测试时发现,若调用的方法涉及到对 sql 数据库的处理,则会抛出 NullPointerExceptionNoClassDefFoundError 等等异常。

复现问题

安装 EXPANSION_PLAYER_DATABASE 模块,并执行加载数据库、加载玩家数据等操作即可复现。

示例

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 }

Micalhl commented 2 months ago

你在用 6.2?

image

6.2 不要用这种方式添加模块,因为模块名全改了,你要手动的去写对应模块的名称。 你可以参考这里

Micalhl commented 2 months ago

建议不要使用 TabooLib 6.2,你可能需要对 TabooLib 作一些修改才能保证一些模块的正常使用,很麻烦的。

heyhey123-git commented 2 months ago

建议不要使用 TabooLib 6.2,你可能需要对 TabooLib 作一些修改才能保证一些模块的正常使用,很麻烦的。

version {
taboolib = "6.1.2-beta10"
}

没有,用的最新release那个版本

Micalhl commented 2 months ago

建议不要使用 TabooLib 6.2,你可能需要对 TabooLib 作一些修改才能保证一些模块的正常使用,很麻烦的。

version {
        taboolib = "6.1.2-beta10"
    }

没有,用的最新release那个版本

噢噢,看错了,不好意思

image

数据库模块本身就不会随玩家数据库模块打包,需要你自行打包。

你的 taboolib 用的是 6.1.2-beta10,数据库模块就要使用对应版本,不要使用其他版本,可能会有错误。 database-sql 是 6.2 中数据库的名称,6.1 还叫 module-database,你应该使用 DATABASE 这个属性,而不是打包,打包可能会出现问题。

install(
    UNIVERSAL,
    BUKKIT_ALL,
    NMS_UTIL,
    EXPANSION_PLAYER_DATABASE,
    DATABASE // <--- 这里添加数据库模块
)