2014-06-17 71 views
7

我有以下libraryDependencies設定一個非常經典的build.sbt用於播放2.3斯卡拉項目:如何從庫中刪除依賴項由插件添加的依賴項?

libraryDependencies ++= Seq(
    "org.scalatestplus" % "play_2.10" % "1.1.0" % "test" 
    "org.mockito" % "mockito-core" % "1.9.5" % "test" 
) 

lazy val portal = (project in file(".")).enablePlugins(PlayScala) 

PlayScala插件添加specs2依賴的是「污染」類路徑,使良好的進口更難IDE。

如何從libraryDependencies中刪除依賴項?

+0

見[playframework /框架/項目/ Dependencies.scala](https://github.com/playframework/playframework/blob/ 17d037e06ebf135b06c5309e674a21b59781f140 /框架/項目/ Dependencies.scala)。 Playframework與specs2緊密結合。 –

+0

是的。但只用於測試。每個在依賴中的使用都將其映射到測試範圍中。所以,如果我不使用Specs2和play-specs2集成,但只通過最大限度的集成來實現scalatest,我相信它應該起作用。我認爲Specs2依賴依然存在,因爲scalatest集成是最近的(自2.2.x以來),但它提供了所有需要的東西。 –

+1

請參閱排除傳遞相關性主題:http://www.scala-sbt.org/0.13/docs/Library-Management.html –

回答

9

我加入解決了類似的問題,下面我Build.scala

def excludeSpecs2(module: ModuleID): ModuleID = 
    module.excludeAll(ExclusionRule(organization = "org.specs2")) 

val main = Project(appName, file(".")) 
    .enablePlugins(play.PlayScala) 
    .settings(libraryDependencies ~= (_.map(excludeSpecs2))) 
+1

謝謝,這對我有用,但不是其他回答。 –

6

我成功了。感謝Venkat,我知道排除,但由於我沒有自己聲明依賴,我不知道在哪裏使用它。

這是非常簡單的:由我自己重新聲明該插件添加的依賴性:

libraryDependencies ++= Seq(
    "org.scalatestplus" % "play_2.10" % "1.1.0" % "test", 
    "org.mockito" % "mockito-core" % "1.9.5" % "test", 
    "com.typesafe.play" %% "play-test" % play.core.PlayVersion.current % "test" exclude("org.specs2", "specs2-core_2.10") exclude("org.specs2", "specs2-junit_2.10") exclude("org.specs2", "specs2-mock_2.10") exclude("org.specs2", "specs2-matcher-extra_2.10") exclude("org.specs2", "") exclude("com.novocode", "junit-interface") exclude("com.google.guava", "guava") exclude("com.google.code.findbugs", "jsr305") 
) 

也許不是很優雅,但它的工作原理。

+3

我很好奇爲什麼這是downvoted – Daenyth