由于冲突/传递(elasticsearch / lucene /Jack兔子)依赖关系,我希望在测试中拥有与正常运行应用程序时不同的libraryDependencies。我用下面的设置解决了这个问题,但这需要使用-Dtest运行激活程序,这将使我的应用程序在完成测试时无法正常运行。相反,运行只是激活程序,将运行我的应用程序,但不会运行我的测试。所以,不太方便,我认为这可以做得更好(顺便说一句,我对sbt/scala非常陌生)
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)
发布于 2016-02-08 17:31:14
我没有一个可以真正测试这是否有效的设置,但是从我如何理解sbt依赖项的角度来看,它应该:
依赖项可以有一种称为配置的范围。通常,这用于定义仅测试依赖项:
"com.typesafe.akka" % "akka-testkit_2.11" % "2.3.14" % "test"
但是,您还应该能够使用“编译”和“运行时”来定义编译时和运行时依赖关系。
如果我使用不同版本的依赖项,sbt会打印警告。问题是,这将使用不同版本的依赖项来编译它,然后通过测试运行它。因此,它将在与编译时不同的版本上运行。当然,也有一些库,特别是如果您使用用于编译的更新版本运行时,这将是可行的。
如果您真的需要用不同的依赖项编译您的应用程序两次,并且使用一个构建来运行,另一个用于测试,我担心,如果不扩展sbt或类似的东西,就不会有解决方案。
您可以尝试创建两个模块,一个带有主代码,另一个用于测试,然后尝试交叉构建第一个模块的两个不同版本。Sbt可以轻松地在多个Scala版本上进行交叉构建,但我不认为它可以对库的多个版本进行现成的构建。
发布于 2016-02-09 08:05:31
谢谢你让我走上正轨。下面的设置适用于我:
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"
)
}
https://stackoverflow.com/questions/35272727
复制相似问题