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

配置Bazel+Scala时找不到主类io.baku.sbzcp.Main的问题求助

解决Bazel Scala项目中带包结构的主类找不到问题

我来帮你搞定这个问题!你遇到的Could not find or load main class错误,核心原因是Scala文件的实际目录结构和包声明不匹配,导致Bazel编译后生成的类文件路径和你指定的main_class对不上。

问题根源

当你把文件移到scala目录并去掉包声明时,类的包名是空,文件位置和类名直接对应,所以Bazel能正确找到主类。但一旦加上包名io.baku.sbzcp,就必须保证文件的目录结构和包名完全一致,否则编译后的类文件路径会和main_class指定的不匹配,自然找不到。

具体解决方案

1. 调整目录结构匹配包名

你的主类是io.baku.sbzcp.Main,那么Scala文件必须放在如下路径:

app/io/baku/sbzcp/Main.scala

而不是直接放在app/Main.scala下。这样Bazel编译时会根据目录结构,把类文件生成到对应的io/baku/sbzcp路径下,和你main_class指定的完全对应。

2. 验证BUILD文件配置

你当前的BUILD文件配置是没问题的:

load("@io_bazel_rules_scala//scala:scala.bzl", "scala_binary")
scala_binary(
    name = "Main",
    srcs = glob(["app/**/*.scala"]),
    main_class = "io.baku.sbzcp.Main",
    visibility = ["//visibility:public"]
)

只要目录结构调整正确,glob(["app/**/*.scala"])会正确抓取所有符合包结构的源文件。

3. 可选:使用标准项目布局

如果你习惯用SBT/Maven风格的目录结构,可以把源文件移到src/main/scala/io/baku/sbzcp/Main.scala,然后修改BUILD文件的srcs配置:

scala_binary(
    name = "Main",
    srcs = glob(["src/main/scala/**/*.scala"]),
    main_class = "io.baku.sbzcp.Main",
    visibility = ["//visibility:public"]
)

这种布局更符合Java/Scala项目的常规规范,也能让Bazel的Scala规则更顺畅地识别包结构。

4. 调试小技巧(可选)

如果调整后还是有问题,可以先执行编译命令:

bazel build //:Main

然后查找编译后的类文件位置:

find bazel-bin -name "Main.class"

正常情况下,路径应该是bazel-bin/io/baku/sbzcp/Main.class。如果路径不对,说明你的目录结构和包名依然不匹配,需要再检查调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:19