2015-05-15 48 views
3

我有一個SBT項目,結構喜歡這裏:https://orrsella.com/2014/09/24/integration-and-end-to-end-test-configurations-in-sbt-for-scala-java-projects/。它包括標準主要測試目錄和另外e2e。還有一個任務「全部測試」,它運行所有測試。一切工作正常,除非我運行e2e或覆蓋插件一起測試。我越來越:java.lang.NoClassDefFoundError:scoverage /祈求$NoClassDefFoundError的運行測試,在SBT與scoverage插件

使用表現出來:dependencyClasspath顯示E2E:dependencyClasspath,我可以看到E2E classpath中缺少scoverage插件罐子。任何想法有什麼不對以及如何解決它?

Build.sbt

import org.scalatra.sbt._ 
import sbt.Keys._ 
import sbt._ 

object MaAppBuild extends Build { 
    val Organization = "com.my-org" 
    val Name = "My App" 
    val Version = "0.1.0-SNAPSHOT" 
    val ScalaVersion = "2.11.6" 
    val AkkaVersion = "2.3.4" 

    val ScalatraVersion = "2.3.0" 
    lazy val project = Project(
    "My-App", 
    file("."), 
    configurations = Configurations.default ++ Testing.configs, 
    settings = Defaults.coreDefaultSettings ++ ScalatraPlugin.scalatraSettings ++ Testing.settings ++ Seq(
     organization := Organization, 
     name := Name, 
     version := Version, 
     scalaVersion := ScalaVersion, 
     resolvers += "Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/", 
     resolvers += "Akka Repo" at "http://repo.akka.io/repository", 
     libraryDependencies ++= Seq(
     "com.typesafe.akka" %% "akka-actor" % AkkaVersion, 
     "com.typesafe.akka" % "akka-testkit_2.11" % AkkaVersion % "test;it;e2e", 
     "net.databinder.dispatch" %% "dispatch-core" % "0.11.1", 
     "org.scalatra" %% "scalatra" % ScalatraVersion, 
     "com.typesafe.akka" %% "akka-testkit" % AkkaVersion % "test;it;e2e", 
     "org.scalatra" %% "scalatra-scalatest" % ScalatraVersion % "test;it;e2e", 
     "com.github.tomakehurst" % "wiremock" % "1.55" % "test;it;e2e", 
     "ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime", 
     "org.scalatra" %% "scalatra-json" % "2.4.0.RC1", 
     "org.json4s" %% "json4s-jackson" % "3.2.11", 
     "com.typesafe" % "config" % "1.2.1", 
     "org.json4s" %% "json4s-native" % "3.2.11", 
     "org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "container", 
     "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts Artifact("javax.servlet", "jar", "jar") 
    ) 
    ) 
) 
} 

集成和端到端的測試配置:

import sbt.Keys._ 
import sbt._ 

object Testing { 
    val IntegrationTest = config("it").extend(Runtime) 

    val EndToEndTest = config("e2e").extend(Runtime) 

    val configs = Seq(IntegrationTest, EndToEndTest) 

    lazy val testAll = TaskKey[Unit]("test-all") 

    private lazy val itSettings = 
    inConfig(IntegrationTest)(Defaults.testSettings) ++ 
     Seq(
     fork in IntegrationTest := false, 
     parallelExecution in IntegrationTest := false, 
     scalaSource in IntegrationTest := baseDirectory.value/"src/it/scala", 
     resourceDirectory in IntegrationTest := baseDirectory.value/"src/test/resources") 

    private lazy val e2eSettings = 
    inConfig(EndToEndTest)(Defaults.testSettings) ++ 
     Seq(
     fork in EndToEndTest := false, 
     parallelExecution in EndToEndTest := false, 
     scalaSource in EndToEndTest := baseDirectory.value/"src/e2e/scala", 
     resourceDirectory in EndToEndTest := baseDirectory.value/"src/test/resources") 


    lazy val settings = e2eSettings ++ itSettings ++ Seq(
    testAll <<= (test in EndToEndTest) dependsOn (test in IntegrationTest) dependsOn(test in Test) 
) 
} 

java.lang.NoClassDefFoundError:scoverage /祈求$

addSbtPlugin("com.mojolly.scalate" % "xsbt-scalate-generator" % "0.5.0") 

addSbtPlugin("org.scalatra.sbt" % "scalatra-sbt" % "0.3.5") 

addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.1.0") 
+0

我不能重現任何錯誤。你可以減少上面的設置並添加缺少的東西來引發失敗嗎?發送給sbt的代碼和任務/命令丟失。 –

回答

1

似乎你n EED的設置添加到您的SBT項目:

作品對我來說,與"org.scoverage" % "sbt-scoverage" % "1.5.0"

coverageEnabled in Test := true 

,我還發現,對於<1.4.0版本還有另一種解決方案:

coverageEnabled.in(ThisBuild ,Test, test) := true 
相關問題