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

Scalameter bench:test任务未找到问题排查求助

ScalaMeter基准测试配置问题:bench:test任务找不到的解决方法

问题背景

在现有Scala项目中添加Scalameter基准测试,按文档配置build.sbt后,执行sbt bench:test时提示任务不存在,sbt任务列表中也无bench相关任务。基准测试文件放置在src/bench/scala/EndpointBenchmark.scala,怀疑配置未正确关联到root项目。

错误信息

$ sbt "bench:test"
[info] welcome to sbt 1.8.2 (N/A Java 17.0.6)
<snip>
[error] No such setting/task
[error] bench:test
[error]

原因分析

核心问题是重复定义了指向当前目录的项目:原build.sbt中同时创建了root和basic两个项目,均指向file(".")。sbt默认会使用第一个定义的root项目,但bench相关配置仅添加到了basic项目上,导致实际使用的root项目没有bench任务。

修复方案

删除重复的basic项目定义,将bench配置直接整合到root项目中。修复后的build.sbt如下:

val scalaVersionString = "2.13.10"

ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / scalaVersion := scalaVersionString

val AkkaVersion = "2.7.0"
val AkkaHttpVersion = "10.5.0"

// 定义bench配置,继承自Test配置
lazy val Benchmark = config("bench") extend Test

lazy val root = (project in file("."))
  .settings(
    name := "sample_project",
    // 编译选项
    scalacOptions ++= Seq("-deprecation", "-unchecked", "-feature", "-Xlint"),
    publishArtifact := false,
    // 依赖配置,将Scalameter仅关联到bench配置
    libraryDependencies ++= Seq(
      "com.typesafe.akka" %% "akka-actor-typed" % AkkaVersion,
      "com.typesafe.akka" %% "akka-stream" % AkkaVersion,
      "com.typesafe.akka" %% "akka-http" % AkkaHttpVersion,
      "com.typesafe.akka" %% "akka-http-testkit" % AkkaHttpVersion,
      "com.typesafe.akka" %% "akka-stream-testkit" % AkkaVersion,
      "com.typesafe.akka" %% "akka-http-spray-json" % AkkaHttpVersion,
      "com.maximeroussy.invitrode" % "invitrode" % "2.0.2",
      "org.scalatest" %% "scalatest" % "3.2.15" % Test,
      "com.storm-enroute" %% "scalameter" % "0.21" % "bench",
      "ch.qos.logback" % "logback-classic" % "1.4.5"
    ),
    // ScalaMeter所需的仓库
    resolvers ++= Seq(
      "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots",
      "Sonatype OSS Releases" at "https://oss.sonatype.org/content/repositories/releases"
    ),
    // 添加ScalaMeter测试框架
    testFrameworks += new TestFramework("org.scalameter.ScalaMeterFramework"),
    // bench配置的专属设置
    Benchmark / parallelExecution := false,
    Benchmark / logBuffered := false
  )
  .configs(Benchmark) // 将bench配置添加到root项目
  .settings(inConfig(Benchmark)(Defaults.testSettings): _*) // 应用bench配置的测试任务逻辑

验证步骤

  • 确认基准测试文件路径正确:src/bench/scala/EndpointBenchmark.scala(bench配置默认读取该目录下的Scala代码)
  • 执行sbt bench:test,此时应能正常找到并运行bench任务
  • 若需查看所有bench相关任务,可执行sbt bench:tasks

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:07:49