首页 > 解决方案 > SBT: "value map is not a member of (sbt.TaskKey[sbt.Tests.Output], sbt.TaskKey[sbt.Tests.Output]) " when updating from 0.13.8 to 1.x.x

问题描述

I've below sbt-mult-jvm plugin which are working fine on sbt version 0.13.18.

    import com.typesafe.sbt.SbtMultiJvm
    import com.typesafe.sbt.SbtMultiJvm.MultiJvmKeys.MultiJvm

    lazy val rootProject = (project in file("."))
    .settings(executeTests in IntegrationTest <<= (executeTests in Test, executeTests in MultiJvm) map {
    case (testResults, multiNodeResults)  =>
        val overall =
        if (testResults.overall.id < multiNodeResults.overall.id)
            multiNodeResults.overall
        else
            testResults.overall
        Tests.Output(overall,
        testResults.events ++ multiNodeResults.events,
        testResults.summaries ++ multiNodeResults.summaries)
    }).
    configs(IntegrationTest, MultiJvm)

But when I updated the sbt version to 1.x.x using this migration guide

    import com.typesafe.sbt.SbtMultiJvm
    import com.typesafe.sbt.SbtMultiJvm.MultiJvmKeys.MultiJvm

    lazy val rootProject = (project in file("."))
    .settings(executeTests in IntegrationTest := (( executeTests in Test, executeTests in MultiJvm).value) map {
    case (testResults, multiNodeResults)  =>
        val overall =
        if (testResults.overall.id < multiNodeResults.overall.id)
            multiNodeResults.overall
        else
            testResults.overall
        Tests.Output(overall,
        testResults.events ++ multiNodeResults.events,
        testResults.summaries ++ multiNodeResults.summaries)
    }).
    configs(IntegrationTest, MultiJvm)

I'm getting below error.

    [info] Done updating.
    [warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:87: error: `<<=` operator is removed. Use `key := { x.value }` or `key ~= (old => { newValue })`.
    See http://www.scala-sbt.org/1.x/docs/Migrating-from-sbt-013x.html
    settings(compile in MultiJvm <<= (compile in MultiJvm) triggeredBy (compile in IntegrationTest)).
                                ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:88: error: value map is not a member of (sbt.TaskKey[sbt.Tests.Output], sbt.TaskKey[sbt.Tests.Output])
    settings(executeTests in IntegrationTest <<= (executeTests in Test, executeTests in MultiJvm) map {
                                                                                                    ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:91: error: value overall is not a member of Any
            if (testResults.overall.id < multiNodeResults.overall.id)
                            ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:91: error: value overall is not a member of Any
            if (testResults.overall.id < multiNodeResults.overall.id)
                                                        ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:92: error: value overall is not a member of Any
            multiNodeResults.overall
                            ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:94: error: value overall is not a member of Any
            testResults.overall
                        ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:96: error: value events is not a member of Any
            testResults.events ++ multiNodeResults.events,
                        ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:96: error: value events is not a member of Any
            testResults.events ++ multiNodeResults.events,
                                                ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:97: error: value summaries is not a member of Any
            testResults.summaries ++ multiNodeResults.summaries)
                        ^
    /Users/rajkumar.natarajan/Documents/Coding/misc/akka-zk-cluster-seed/build.sbt:97: error: value summaries is not a member of Any
            testResults.summaries ++ multiNodeResults.summaries)
                                                    ^
    [error] sbt.compiler.EvalException: Type error in expression
    [error] sbt.compiler.EvalException: Type error in expression

How can I resolve this error?

标签: scalasbt

解决方案


The answer is in the link you provide; specifically "the tuple enrichments (apply and map) for TaskKey’s" has been removed.

The replacement is to use .value, which removes the need for the map.

Your project should look something like this (untested):

import com.typesafe.sbt.SbtMultiJvm
import com.typesafe.sbt.SbtMultiJvm.MultiJvmKeys.MultiJvm

lazy val rootProject = (project in file("."))
  .settings(executeTests in IntegrationTest := {
      val testResults = (executeTests in Test).value
      val multiNodeResults = (executeTests in MultiJvm).value
      val overall = if (testResults.overall.id < multiNodeResults.overall.id)
          multiNodeResults.overall
        else
          testResults.overall
      Tests.Output(overall,
      testResults.events ++ multiNodeResults.events,
      testResults.summaries ++ multiNodeResults.summaries)
    })
  .configs(IntegrationTest, MultiJvm)

推荐阅读