You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无main方法启动Spring应用报错:未找到自动配置类

解决方案

问题根源

Velocity插件的Jar是普通Jar结构,而Spring Boot默认生成的是带特殊启动层的可执行Jar,导致自动配置所需的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports元数据文件没有被正确打包到插件Jar中,或者Spring启动时无法通过Velocity的类加载器读取到这些文件。


步骤1:调整Gradle打包配置

修改build.gradle.kts,禁用Spring Boot的可执行Jar打包,确保生成普通Jar并保留必要的元数据:

plugins {
    id("org.springframework.boot") version "你的Spring Boot版本" apply false // 不自动应用bootJar
    id("io.spring.dependency-management") version "你的依赖管理版本"
    kotlin("jvm") version "你的Kotlin版本"
    kotlin("plugin.spring") version "你的Kotlin版本"
}

// 禁用Spring Boot的可执行Jar任务,启用普通Jar打包
tasks.bootJar {
    enabled = false
}

tasks.jar {
    // 确保Spring自动配置元数据被打包进Jar
    from(sourceSets.main.get().output) {
        include("META-INF/spring/**/*")
        include("META-INF/spring.factories") // 兼容旧版Spring Boot自动配置
    }
    // 可选:将所有依赖打包进插件Jar(若Velocity不提供依赖隔离)
    from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
}

dependencyManagement {
    imports {
        mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
    }
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter")
    implementation("com.velocitypowered:velocity-api:你的Velocity版本")
    compileOnly("com.velocitypowered:velocity-proxy:你的Velocity版本")
    // 添加你需要的其他Spring依赖
}

步骤2:适配Spring启动的类加载器

Velocity插件由外部主Jar加载,类加载器上下文与普通Spring Boot应用不同,启动时需指定插件自身的类加载器:

class YourVelocityPlugin(loader: PluginLoader, server: ProxyServer) : VelocityPlugin {
    init {
        // 获取插件专属的类加载器
        val pluginClassLoader = this.javaClass.classLoader

        // 启动Spring时指定类加载器,确保能读取到元数据
        runApplication<SpringApp>(emptyArray()) {
            setClassLoader(pluginClassLoader)
            // 可选:关闭Spring Banner输出,避免干扰Velocity日志
            setBannerMode(Banner.Mode.OFF)
        }
    }
}

@SpringBootApplication
class SpringApp

步骤3:手动指定自动配置类(兜底方案)

如果元数据文件仍无法被读取,直接在Spring启动类中导入所需的自动配置类:

@SpringBootApplication
@ImportAutoConfiguration(
    // 按需添加你需要的自动配置类,示例:
    org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration::class,
    org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration::class
)
class SpringApp

验证步骤

  1. 执行./gradlew jar生成插件Jar
  2. 将Jar放到Velocity的plugins文件夹
  3. 启动Velocity服务,检查Spring是否正常初始化,无自动配置类找不到的报错

内容的提问来源于stack exchange,提问作者Tyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:15:41