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
相关产品推荐
相关产品推荐

