2016-02-08 19 views
1

由於衝突/傳遞(elasticsearch/lucene/jackrabbit)依賴關係,我希望在測試中擁有不同的庫依賴關係,而不是在正常運行應用程序時具有不同的庫依賴關係。我使用下面的設置解決了這個問題,但是這需要使用-Dtest運行激活器,並且這會阻止我的應用在我完成測試時正常運行。另一種方式,即運行激活,運行我的應用程序,但不會運行我的測試。所以,不是很方便,我認爲這是可以做到更好的(順便說一句我很新的SBT /斯卡拉)sbt不同的庫在測試中的依賴性比在正常模式下

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) 

回答

2

我沒有設置,其中我真的可以測試是否有效,但從我如何理解sbt相關性它應該:

依賴關係可以有一種稱爲配置範圍。通常,這是用來定義測試僅依賴關係:

"com.typesafe.akka" % "akka-testkit_2.11" % "2.3.14" % "test" 

但你也應該能夠定義編譯時和運行時唯一依賴性使用「編譯」和「運行」來代替。

如果我使用不同版本的依賴項,sbt會打印出警告。問題是,這將使用不同版本的依賴關係來編譯它,然後使用測試運行它。所以它將運行在與編譯時不同的版本上。當然,有些庫可以工作,特別是如果你使用一個更新的版本來運行,你可以使用它來編譯。

如果你真的需要用不同的依賴性兩次編譯應用程序,並使用一個建立和運行一個測試,我怕,也不會有不延長SBT或類似的東西的解決方案。

您可以嘗試製作兩個模塊,一個使用主代碼,一個用於測試,然後嘗試交叉構建兩個不同版本的第一個模塊。 Sbt可以輕鬆地跨多個Scala版本進行交叉構建,但我認爲它不能爲多個版本的庫開箱即用。

1

謝謝@dth,你讓我走上正軌。下面的設置對我有用:

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"  
    ) 
} 
相關問題