Velocity平台无法启动
Closed this issue · 21 comments
以上为错误日志
插件主类
import taboolib.common.platform.Platform
import taboolib.common.platform.PlatformSide
import taboolib.common.platform.Plugin
import taboolib.common.platform.function.releaseResourceFile
import top.frankhan.missingbyriver.fastlib.core.Core
import top.frankhan.missingbyriver.fastlib.velocity.database.RedisMessageEvent
@PlatformSide(Platform.VELOCITY)
object FastLib : Plugin() {
override fun onLoad() {
Core.redisDB.setCallEvent { server, value ->
RedisMessageEvent(server, value).call()
}
}
override fun onDisable() {
Core.redisDB.disable()
Core.mongoDB.disable()
}
fun reload() {
releaseResourceFile("database.yml",false)
Core.redisDB.reload()
Core.mongoDB.reload()
}
}
编译后包内并无taboolib.common.platform.Plugin
但Bukkit平台也是如此且可以运行,并且在启动过程中没有下载依赖库
以上为错误日志 插件主类
import taboolib.common.platform.Platform import taboolib.common.platform.PlatformSide import taboolib.common.platform.Plugin import taboolib.common.platform.function.releaseResourceFile import top.frankhan.missingbyriver.fastlib.core.Core import top.frankhan.missingbyriver.fastlib.velocity.database.RedisMessageEvent @PlatformSide(Platform.VELOCITY) object FastLib : Plugin() { override fun onLoad() { Core.redisDB.setCallEvent { server, value -> RedisMessageEvent(server, value).call() } } override fun onDisable() { Core.redisDB.disable() Core.mongoDB.disable() } fun reload() { releaseResourceFile("database.yml",false) Core.redisDB.reload() Core.mongoDB.reload() } }编译后包内并无taboolib.common.platform.Plugin 但Bukkit平台也是如此且可以运行,并且在启动过程中没有下载依赖库
发一下build.gradle.kts
用的多模块SDK
plugins-velocity(用于打包的)
@file:Suppress("PropertyName", "SpellCheckingInspection")
taboolib {
description {
name(rootProject.name)
}
}
tasks {
jar {
// 构件名
archiveFileName.set("${rootProject.name}-${archiveFileName.get().substringAfter('-')}")
// 打包子项目源代码
rootProject.subprojects.forEach {
if(it.name.contains("core") || it.name.contains("velocity")) {
from(it.sourceSets["main"].output)
}
}
}
sourcesJar {
// 构件名
archiveFileName.set("${rootProject.name}-${archiveFileName.get().substringAfter('-')}")
// 打包子项目源代码
rootProject.subprojects.forEach {
if(it.name.contains("core") || it.name.contains("velocity")) {
from(it.sourceSets["main"].allSource)
}
}
}
}
project:common
dependencies {
compileOnly("net.kyori:adventure-text-minimessage:4.15.0")
compileOnly("com.google.code.gson:gson:2.10.1")
compileOnly("org.mongodb:mongodb-driver-sync:4.11.1")
compileOnly("redis.clients:jedis:5.1.0")
}
// 子模块
taboolib { subproject = true }
gradle.buildFinished {
buildDir.deleteRecursively()
}
project:runtime-velocity
dependencies {
compileOnly(project(":project:core"))
compileOnly("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")
compileOnly("net.kyori:adventure-text-minimessage:4.15.0")
annotationProcessor("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")
}
// 子模块
taboolib { subproject = true }
gradle.buildFinished {
buildDir.deleteRecursively()
}
root project
@file:Suppress("PropertyName", "SpellCheckingInspection")
import io.izzel.taboolib.gradle.*
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
java
`maven-publish`
id("io.izzel.taboolib") version "2.0.2"
id("org.jetbrains.kotlin.jvm") version "1.8.22"
}
subprojects {
if (this.name != "temp-velocity") {
apply(plugin = "java-library")
apply(plugin = "maven-publish")
apply(plugin = "org.jetbrains.kotlin.jvm")
if (!this.name.startsWith("api-")) {
apply(plugin = "io.izzel.taboolib")
taboolib {
env {
repoTabooLib = "http://frankhan.top:8081/repository/maven-releases"
if (this@subprojects.name.endsWith("-velocity")) {
install(VELOCITY)
}else if (this@subprojects.name.endsWith("-bukkit")) {
install(BUKKIT_ALL, EXPANSION_PLAYER_FAKE_OP, AI, CONFIGURATION, EFFECT, KETHER, NAVIGATION, NMS, NMS_UTIL, EXPANSION_COMMAND_HELPER)
}else {
install(CONFIGURATION)
}
}
version { taboolib = project.property("taboolibVersion") as String }
}
}
}
// 全局仓库
repositories {
maven("http://example.com:8081/repository/maven-releases/") {
isAllowInsecureProtocol = true
}
maven("http://ptms.ink:8081/repository/releases") {
isAllowInsecureProtocol = true
}
mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://repo.dmulloy2.net/repository/public/")
maven("https://repo.oraxen.com/releases")
maven("https://repo.mineinabyss.com/releases")
maven("https://hub.jeff-media.com/nexus/repository/jeff-media-public/")
maven("https://repo.triumphteam.dev/snapshots")
}
// 全局依赖
dependencies {
compileOnly(kotlin("stdlib"))
}
// 编译配置
java {
withSourcesJar()
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
}
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "17"
freeCompilerArgs = listOf("-Xjvm-default=all", "-Xextended-compiler-checks")
}
}
}
gradle.buildFinished {
buildDir.deleteRecursively()
}
subprojects
.filter { it.name.startsWith("plugin") || it.name == "core" }
.forEach { proj ->
proj.publishing { applyToSub(proj) }
}
fun PublishingExtension.applyToSub(subProject: Project) {
repositories {
maven("http://example.com:8081/repository/maven-releases/") {
isAllowInsecureProtocol = true
credentials {
username = "user"
password = "password"
}
authentication {
create<BasicAuthentication>("basic")
}
}
}
publications {
repositories {
maven("http://example.com:8081/repository/maven-releases/") {
isAllowInsecureProtocol = true
}
}
create<MavenPublication>("maven") {
artifactId = subProject.name
groupId = "top.frankhan.custom.fastlib"
version = "${project.version}"
artifact(subProject.tasks["jar"])
println("> Apply \"$groupId:$artifactId:$version\"")
}
}
}
@FrankHan052176 尝试删除Velocity服务端目录下libs文件夹内的TabooLib common模块缓存,重启服务端重新下载
@FrankHan052176 尝试删除Velocity服务端目录下libs文件夹内的TabooLib common模块缓存,重启服务端重新下载
- 刷新本地缓存:例如 SDK 的 refreshDependencies 任务
- 刷新服务端缓存:/libraries/io/izzel/taboolib/common-env 及 /cache/taboolib
- 刷新本地缓存:例如 SDK 的 refreshDependencies 任务
- 刷新服务端缓存:/libraries/io/izzel/taboolib/common-env 及 /cache/taboolib
同样的错误,我执行了refreshDependencies任务,且服务端的根目录并无libraries文件夹以及cache文件夹
且无论是我自己修改的taboolib版本还是原版taboolib,在编译完成后包内都没有common-env的文件,且服务端启动时并不会下载依赖库
- 刷新本地缓存:例如 SDK 的 refreshDependencies 任务
- 刷新服务端缓存:/libraries/io/izzel/taboolib/common-env 及 /cache/taboolib
同样的错误,我执行了refreshDependencies任务,且服务端的根目录并无libraries文件夹以及cache文件夹 且无论是我自己修改的taboolib版本还是原版taboolib,在编译完成后包内都没有common-env的文件,且服务端启动时并不会下载依赖库
编译后jar包内没有common-env是正常的,因为6.1为了缩小jar包体积把common-env改成动态下载了,问题是为什么没有下载(
- 刷新本地缓存:例如 SDK 的 refreshDependencies 任务
- 刷新服务端缓存:/libraries/io/izzel/taboolib/common-env 及 /cache/taboolib
同样的错误,我执行了refreshDependencies任务,且服务端的根目录并无libraries文件夹以及cache文件夹 且无论是我自己修改的taboolib版本还是原版taboolib,在编译完成后包内都没有common-env的文件,且服务端启动时并不会下载依赖库
编译后jar包内没有common-env是正常的,因为6.1为了缩小jar包体积把common-env改成动态下载了,问题是为什么没有下载(
对啊,无法理解,启动后不会自动下载
@Sunshine-wzy 使用SDK样例仅将build.gradle.kts修改为下面这样,依旧无法加载
import io.izzel.taboolib.gradle.*
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
java
id("io.izzel.taboolib") version "2.0.2"
id("org.jetbrains.kotlin.jvm") version "1.8.22"
}
taboolib {
env {
// 安装模块
install(VELOCITY)
}
version { taboolib = "6.1.0" }
}
repositories {
mavenCentral()
}
dependencies {
compileOnly(kotlin("stdlib"))
compileOnly(fileTree("libs"))
}
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
}
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs = listOf("-Xjvm-default=all")
}
}
configure<JavaPluginConvention> {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
@FrankHan052176 理解了,因为Velocity会对插件主类进行依赖注入,用com.google.inject.Guice扫描主类的每个字段和方法,触发了taboolib.common.platform.Plugin类的加载,而这时Plugin类作为common-platform-api模块的一部分还没有被下载,导致NoClassDefFoundError,插件加载中断。但是Bukkit并不会对插件主类进行依赖注入,因此TabooLib在Bukkit下可以正常加载而Velocity不行。修复等 @Bkm016
@FrankHan052176 理解了,因为Velocity会对插件主类进行依赖注入,用com.google.inject.Guice扫描主类的每个字段和方法,触发了taboolib.common.platform.Plugin类的加载,而这时Plugin类作为common-platform-api模块的一部分还没有被下载,导致NoClassDefFoundError,插件加载中断。但是Bukkit并不会对插件主类进行依赖注入,因此TabooLib在Bukkit下可以正常加载而Velocity不行。修复等 @Bkm016
好的,感谢
(我当然知道是因为guava
at我爹就是想看看我爹有什么办法 @Sunshine-wzy
我其实不是很懂这个库,该怎么支持他呢
@Bkm016 把taboolib.common.platform.Plugin从common-platform-api模块移到common模块用java重写或者直接用kt应该也没问题,我看编译出来的字节码没有调用kt的什么东西,应该是可以直接加载的
马上让他滚进common
马上让他滚进common
坏老,有无commit🥺
已重新发布 common
模块,刷新本地缓存重新编译