2016-09-30 74 views
2

加入如何強制Scala使用不同的庫版本?

libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test" 

build.sbt,並刷新該項目後,我得到了這條消息。

SBT project import

[warn] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version:

[warn] * org.scala-lang.modules:scala-xml_2.11:(1.0.5, 1.0.4)

Changing the above

libraryDependencies ++= Seq(
    "org.scalatest" %% "scalatest" % "3.0.0" % "test" 
    exclude("org.scala-lang", "scala-reflect") 
    exclude("org.scala-lang.modules", "scala-xml_2.11") 
) 

解決了這個問題。但是,我不想從scalatest中排除scala-xml_2.11版本1.0.5,我想force the scala compiler使用scala-xml_2.11版本1.0.5而不是版本1.0.4。 (我研究了在版本https://mvnrepository.com)。因此我嘗試了

libraryDependencies ++= Seq(
    "org.scala-lang" % "scala-reflect" % "2.11.8", 
    "org.scala-lang.modules" % "scala-xml_2.11" % "1.0.5" 
) 

然而這導致

SBT project import

[warn] Binary version (2.11) for dependency org.scala-lang#scala-reflect;2.11.8

[warn] in default#myproject$sources_javadoc_2.10;1.0 differs from Scala binary version in project (2.10).

[warn] Binary version (2.11) for dependency org.scala-lang#scala-library;2.11.8

[warn] in default#myproject$sources_javadoc_2.10;1.0 differs from Scala binary version in project (2.10).

[warn] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version:

[warn] * org.scala-lang:scala-library:(2.11.8, 2.10.4)

[warn] * org.scala-lang:scala-reflect:(2.11.8, 2.10.4)

[warn] [FAILED ] com.artima.supersafe#supersafe_2.10.4;1.1.0!supersafe_2.10.4.jar(src): (0ms)

[warn] ==== local: tried

[warn]
/home/user/.ivy2/local/com.artima.supersafe/supersafe_2.10.4/1.1.0/srcs/supersafe_2.10.4-sources.jar

[warn] ==== activator-local: tried [warn] /Development/Activator/activator-dist-1.3.10/repository/com.artima.supersafe/supersafe_2.1... (show balloon)

那我該怎麼辦代scalaVersion := "2.11.8"

編輯:還有什麼我嘗試和沒有工作:

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "org.scala-lang" % "scala-reflect" % scalaVersion.value, 
    "org.scala-lang.modules" %% "scala-xml" % "1.0.5" 
) 

// ScalaTest 
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test" 

[warn] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version: [warn] * org.scala-lang.modules:scala-xml_2.11:(1.0.5, 1.0.4)


scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "org.scala-lang" % "scala-reflect" % scalaVersion.value, 
    "org.scala-lang.modules" %% "scala-xml_2.11" % "1.0.5" 
) 

// ScalaTest 
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test" 

Error:Error while importing SBT project:
...

[info] 
Resolving org.scala-sbt#run;0.13.8 ... [info] Resolving 
org.scala-sbt#task-system;0.13.8 ... [info] Resolving 
org.scala-sbt#tasks;0.13.8 ... [info] Resolving 
org.scala-sbt#tracking;0.13.8 ... [info] Resolving 
org.scala-sbt#cache;0.13.8 ... [info] Resolving 
org.scala-sbt#testing;0.13.8 ... [info] Resolving 
org.scala-sbt#test-agent;0.13.8 ... [info] Resolving 
org.scala-sbt#test-interface;1.0 ... [info] Resolving 
org.scala-sbt#main-settings;0.13.8 ... [info] Resolving 
org.scala-sbt#apply-macro;0.13.8 ... [info] Resolving 
org.scala-sbt#command;0.13.8 ... [info] Resolving 
org.scala-sbt#logic;0.13.8 ... [info] Resolving 
org.scala-sbt#precompiled-2_8_2;0.13.8 ... [info] Resolving 
org.scala-sbt#precompiled-2_9_2;0.13.8 ... [info] Resolving 
org.scala-sbt#precompiled-2_9_3;0.13.8 ... [trace] Stack trace 
suppressed: run 'last *:update' for the full output. [trace] Stack 
trace suppressed: run 'last :ssExtractDependencies' for the full 
output. [error] (:update) sbt.ResolveException: unresolved 
dependency: org.scala-lang.modules#scala-xml_2.11_2.11;1.0.5: not 
found [error] (*:ssExtractDependencies) sbt.ResolveException: 
unresolved dependency: 
org.scala-lang.modules#scala-xml_2.11_2.11;1.0.5: not found [error] 
Total time: 4 s, completed 01.10.2016 17:46:55


scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "org.scala-lang" % "scala-reflect" % scalaVersion.value, 
    "org.scala-lang.modules" %% "scala-xml" % "1.0.5" 
) 

// ScalaTest 
libraryDependencies ++= Seq(
    "org.scalatest" %% "scalatest" % "3.0.0" % "test" 
    exclude("org.scala-lang", "scala-reflect") 
    exclude("org.scala-lang.modules", "scala-xml") 
) 

[warn] Multiple dependencies with the same organization/name but different versions. To avoid conflict, pick one version: [warn] * org.scala-lang.modules:scala-xml_2.11:(1.0.5, 1.0.4)

我的build.sbt

name := "MyProject" 
version := "0.1.0" 
scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "org.scala-lang" % "scala-reflect" % scalaVersion.value, 
    "org.scala-lang.modules" %% "scala-xml" % "1.0.5" 
) 

// ScalaTest 
//libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.0" 
//libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test" 
libraryDependencies ++= Seq(
    "org.scalatest" %% "scalatest" % "3.0.0" % "test" 
    exclude("org.scala-lang", "scala-reflect") 
    exclude("org.scala-lang.modules", "scala-xml_2.11") 
) 

回答

0

不要替代;您需要scalaVersionlibraryDependencies。 雖然使用

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "org.scala-lang" % "scala-reflect" % scalaVersion.value, 
    "org.scala-lang.modules" %% "scala-xml" % "1.0.5" 
) 

避免的錯誤,當你最終改變scalaVersion

通過刪除scalaVersion你會得到默認scalaVersion := "2.10.4"(至少與你的SBT的版本/設置),但你的libraryDependencies仍然需要2.11。

+0

你確定你不是指'「scala-xml_2.11」嗎? – Make42

+0

這在任何情況下都不起作用(請參閱更新後的問題)。 – Make42

+0

1.注意'%%'和'%'之間的區別。 '%%'自動添加正確的Scala版本後綴('_2.11'或'_2.10')。 –

1

排除特定的傳遞依賴的方式是這樣的:

  1. 運行sbt evicted找出哪些項目依賴的過時的庫拉,讓我們假設有問題的圖書館是:com.typesafe.slick

  2. 添加下列排除(括號很重要):

    ("com.typesafe" %% "slick" % "3.1.1").exclude("org.scala-lang.modules", "scala-xml_2.11")

    通常添加爲您將上市的依賴。

  3. 這將防止sbt包含任何版本的scala-xml作爲Slick的傳遞依賴項進入。

相關問題