发布
社区首页 >问答首页 >sbt测试中的libraryDependencies与正常模式下的不同

sbt测试中的libraryDependencies与正常模式下的不同
EN

Stack Overflow用户
提问于 2016-02-08 15:03:20
回答 2查看 722关注 0票数 2

由于冲突/传递(elasticsearch / lucene /Jack兔子)依赖关系,我希望在测试中拥有与正常运行应用程序时不同的libraryDependencies。我用下面的设置解决了这个问题,但这需要使用-Dtest运行激活程序,这将使我的应用程序在完成测试时无法正常运行。相反,运行只是激活程序,将运行我的应用程序,但不会运行我的测试。所以,不太方便,我认为这可以做得更好(顺便说一句,我对sbt/scala非常陌生)

代码语言:javascript
代码运行次数:0
复制
name := """example"""

version := "0.1"

lazy val root = (project in file(".")).enablePlugins(PlayJava)

scalaVersion := "2.11.1"

// fork in Test := true

javaOptions in Test += "-Dconfig.file=conf/application.test.conf"

javaOptions in Test += "-Dlogger.file=conf/test-logger.xml"

// run activator -Dtest
if (sys.props.contains("test")) {
  Seq[Project.Setting[_]](  
    libraryDependencies ++= {
      Seq(
          javaJdbc,
          javaEbean,
          cache,
          javaWs,
          "org.webjars" %% "webjars-play" % "2.3.0-2",
          "org.webjars" % "bootstrap" % "3.3.6",
          "org.webjars" % "font-awesome" % "4.5.0",
          "be.objectify" %% "deadbolt-java" % "2.3.3",
          "org.apache.lucene" % "lucene-core" % "3.6.0",
          "org.elasticsearch" % "elasticsearch" % "1.7.4" exclude("org.apache.lucene", "lucene-core"),
          "javax.jcr" % "jcr" % "2.0",
          "org.apache.jackrabbit" % "jackrabbit-core" % "2.11.2",
          "org.apache.jackrabbit" % "jackrabbit-jcr2dav" % "2.11.2",
          "org.apache.tika" % "tika-parsers" % "1.11",
          "org.apache.tika" % "tika-core" % "1.11",
          "commons-io" % "commons-io" % "2.4",
          "com.typesafe.akka" %  "akka-testkit_2.11" % "2.3.14" % "test"
        )
    }
  )
} else {
  Seq[Project.Setting[_]](
   libraryDependencies ++= {
      Seq(
          javaJdbc,
          javaEbean,
          cache,
          javaWs,
          "org.webjars" %% "webjars-play" % "2.3.0-2",
          "org.webjars" % "bootstrap" % "3.3.6",
          "org.webjars" % "font-awesome" % "4.5.0",
          "be.objectify" %% "deadbolt-java" % "2.3.3",
          "org.elasticsearch" % "elasticsearch" % "1.7.4",
          "javax.jcr" % "jcr" % "2.0",
          "org.apache.jackrabbit" % "jackrabbit-core" % "2.11.2",
          "org.apache.jackrabbit" % "jackrabbit-jcr2dav" % "2.11.2",
          "org.apache.tika" % "tika-parsers" % "1.11",
          "org.apache.tika" % "tika-core" % "1.11",
          "commons-io" % "commons-io" % "2.4",
          "com.typesafe.akka" %  "akka-testkit_2.11" % "2.3.14" % "test"     
       )
    }
  )
}


//.. our private nexus repo left out here

resolvers += "JBoss Repository" at "https://repository.jboss.org/nexus/content/repositories"

resolvers += "JBoss Third-Party Repository" at "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases"

resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

resolvers += Resolver.url("Objectify Play Repository", url("http://deadbolt.ws/releases/"))(Resolver.ivyStylePatterns)
EN

回答 2

Stack Overflow用户

发布于 2016-02-08 17:31:14

我没有一个可以真正测试这是否有效的设置,但是从我如何理解sbt依赖项的角度来看,它应该:

依赖项可以有一种称为配置的范围。通常,这用于定义仅测试依赖项:

代码语言:javascript
代码运行次数:0
复制
"com.typesafe.akka" %  "akka-testkit_2.11" % "2.3.14" % "test"

但是,您还应该能够使用“编译”和“运行时”来定义编译时和运行时依赖关系。

如果我使用不同版本的依赖项,sbt会打印警告。问题是,这将使用不同版本的依赖项来编译它,然后通过测试运行它。因此,它将在与编译时不同的版本上运行。当然,也有一些库,特别是如果您使用用于编译的更新版本运行时,这将是可行的。

如果您真的需要用不同的依赖项编译您的应用程序两次,并且使用一个构建来运行,另一个用于测试,我担心,如果不扩展sbt或类似的东西,就不会有解决方案。

您可以尝试创建两个模块,一个带有主代码,另一个用于测试,然后尝试交叉构建第一个模块的两个不同版本。Sbt可以轻松地在多个Scala版本上进行交叉构建,但我不认为它可以对库的多个版本进行现成的构建。

票数 2
EN

Stack Overflow用户

发布于 2016-02-09 08:05:31

谢谢你让我走上正轨。下面的设置适用于我:

代码语言:javascript
代码运行次数:0
复制
libraryDependencies ++= {
  Seq(
      javaJdbc,
      javaEbean,
      cache,
      javaWs,
      "org.webjars" %% "webjars-play" % "2.3.0-2",
      "org.webjars" % "bootstrap" % "3.3.6",
      "org.webjars" % "font-awesome" % "4.5.0",
      "be.objectify" %% "deadbolt-java" % "2.3.3",
      "org.apache.lucene" % "lucene-core" % "3.6.0" % "compile,test",
      "org.elasticsearch" % "elasticsearch" % "1.7.4" % "compile,runtime",
      "org.elasticsearch" % "elasticsearch" % "1.7.4"  % "test" exclude("org.apache.lucene", "lucene-core"),          
      "javax.jcr" % "jcr" % "2.0",
      "org.apache.jackrabbit" % "jackrabbit-core" % "2.11.2",
      "org.apache.jackrabbit" % "jackrabbit-jcr2dav" % "2.11.2",
      "org.apache.tika" % "tika-parsers" % "1.11",
      "org.apache.tika" % "tika-core" % "1.11",
      "commons-io" % "commons-io" % "2.4",
      "com.typesafe.akka" %  "akka-testkit_2.11" % "2.3.14" % "test"     
   )
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35272727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档