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

Windows下Spring Boot应用启动报NoClassDefFoundError问题求助

问题描述

首次运行一个遗留Spring Boot Java应用,使用OpenJDK 1.8.0_392和Bazel 6.3.2。该应用在Linux系统(同版本Java和Bazel)可正常运行,但在Windows环境下运行时抛出以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError:
 org/springframework/boot/autoconfigure/web/ServerProperties
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.getDeclaredMethod(Class.java:2128)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:47)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.autoconfigure.web.ServerProperties
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        ... 7 more

项目的bazel.build文件内容如下:

load("@rules_java//java:defs.bzl", "java_binary", "java_library", "java_test")

package(default_visibility = ["//visibility:public"])

load("@rules_spring//springboot:springboot.bzl", "springboot")

springboot_deps = [
    "@rules_spring//springboot/import_bundles:springboot_required_deps",
    "@maven//:org_springframework_boot_spring_boot_starter_jetty",
    "@maven//:org_springframework_boot_spring_boot_starter_web",
    "@maven//:org_springframework_boot_spring_boot_loader_tools",
    "@maven//:org_springframework_spring_webmvc",
    "@maven//:javax_annotation_javax_annotation_api",
]

java_library(
    name = "keycloak-service-lib",
    srcs = glob(["src/main/java/com/brame/**/*.java"]),
    resources = glob(["src/main/resources/**/*"]),
    deps = springboot_deps + [
        "@maven//:com_fasterxml_jackson_core_jackson_databind",
        "@maven//:jakarta_servlet_jakarta_servlet_api",
        "@maven//:org_jboss_logging_jboss_logging",
        "@maven//:org_jboss_resteasy_resteasy_jackson2_provider",
        "@maven//:org_jboss_resteasy_resteasy_jaxrs",
        "@maven//:org_keycloak_keycloak_dependencies_server_all",
        "@maven//:org_postgresql_postgresql",
        "@maven//:org_slf4j_slf4j_api",
        "@maven//:org_springframework_boot_spring_boot_configuration_processor",
        "@maven//:org_springframework_boot_spring_boot_starter_actuator",
        "@maven//:org_springframework_boot_spring_boot_starter_data_jdbc",
        "@maven//:org_springframework_boot_spring_boot_starter_data_jpa",
        "@maven//:org_springframework_cloud_spring_cloud_starter_config",
        "@maven//:org_springframework_cloud_spring_cloud_starter_netflix_eureka_client",
        "@maven//:org_springframework_boot_spring_boot_autoconfigure"
    ],
)

springboot(
    name = "keycloak-service-app",
    boot_app_class = "com.brame.AuthorizationServerApp",
    java_library = ":keycloak-service-lib",
)

经检查,Bazel构建生成的jar文件中不包含org.springframework.boot.autoconfigure.web.ServerProperties类,求解决方法。

解决方法
  • 验证依赖完整性:
    确认@maven//:org_springframework_boot_spring_boot_autoconfigure依赖是否包含目标类。执行以下命令查看依赖构建信息:

    bazel query --output=build @maven//:org_springframework_boot_spring_boot_autoconfigure
    

    也可以找到该依赖jar文件的本地Bazel缓存路径,解压后检查是否存在org/springframework/boot/autoconfigure/web/ServerProperties.class。

  • 调整springboot规则打包配置:
    修改springboot目标,添加include_all_deps = True配置,强制规则将所有依赖打入可执行jar:

    springboot(
        name = "keycloak-service-app",
        boot_app_class = "com.brame.AuthorizationServerApp",
        java_library = ":keycloak-service-lib",
        include_all_deps = True,
    )
    
  • 清理Bazel缓存后重建:
    Windows下Bazel缓存可能存在残留问题,执行清理命令后重新构建:

    bazel clean --expunge
    bazel build //:keycloak-service-app
    
  • 检查依赖版本一致性:
    确认Windows和Linux环境使用的Spring Boot依赖版本完全一致。在WORKSPACE文件中锁定Spring Boot相关依赖的版本,避免Bazel自动拉取不同版本的依赖。

  • 排查路径解析问题:
    检查WORKSPACE中maven_install的配置,确保Windows下路径分隔符处理正常,没有因路径转义导致的依赖拉取失败。

内容的提问来源于stack exchange,提问作者los pollos hermanos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:45:16