принудительное обновление зависимостей в build.sbt

Я использую breeze-viz 0.3, но мне нужно использовать более новую версию jfreechart. Согласно таблице зависимостей https://mvnrepository.com/artifact/org.scalanlp/breeze-viz_2.10/0.3

jfreechart 1.0.13 — это версия по умолчанию, но 1,0.19 — это обновленная версия, которую я хочу. я добавил строки

dependencyOverrides ++= Set(
    "org.jfree" % "jfreechart" % "1.0.19"
)

и перезапустить sbt eclipse, но все равно у меня в проекте есть jfreedchart 1.0.13. Как заставить его использовать 1.0.19?

Вот и весь build.sbt

import AssemblyKeys._

name := "Simple Bayesian"

lazy val commonSettings = Seq(
  version := "1.0",
  organization := "com.myco",
  scalaVersion := "2.10.4"
)

val sparkVersion = "2.0.0"
val hbaseVersion = "1.0.0"
val hadoopVersion = "2.4.0"
val sprayVersion      = "1.3.2"

lazy val app = (project in file("."))
  .settings(commonSettings: _*)
  .settings(
    // your settings here
  )

libraryDependencies <<= scalaVersion {
  scala_version => Seq(
    // Spark and Spark Streaming
    "org.apache.spark" %% "spark-core" % sparkVersion,
    "org.apache.spark" %% "spark-mllib" % sparkVersion,
    "org.apache.spark" %% "spark-streaming" % sparkVersion,
    "org.apache.spark" %% "spark-streaming-kinesis-asl" % sparkVersion,
    //"org.scalanlp" %% "breeze" % "0.12",
    //"org.scalanlp" %% "breeze-natives" % "0.12",
    "org.scalanlp" %% "breeze-viz" % "0.3",
    "org.apache.commons" % "commons-lang3" % "3.3.2",  
    "org.apache.commons" % "commons-math3" %"3.2",
    "org.apache.spark" %% "spark-hive" % sparkVersion,
    "commons-lang" % "commons-lang" % "2.6",
    "com.amazonaws" % "aws-java-sdk" % "1.0.002" excludeAll(ExclusionRule(organization = "javax.servlet")),
    "org.json4s" %% "json4s-jackson" % "3.2.10",
    "org.json4s" %% "json4s-native" % "3.2.10",
    "com.amazonaws" % "amazon-kinesis-client" % "1.3.0",
    "com.amazonaws" % "aws-java-sdk" % "1.9.13",
    //"net.sf.opencsv" % "opencsv" % "2.3",
    "log4j" % "log4j" % "1.2.17",
    "io.spray"          %% "spray-json"      % sprayVersion,
    //"gov.sandia.foundry" % "cognitive-foundry" % "3.4.3",
    //"cc.mallet" % "mallet" % "2.0.8",
    "com.github.scopt" %% "scopt" % "3.2.0"% "provided",
    "com.github.kindlychung" % "sfreechart" % "0.1.2", 
    //"ca.umontreal.iro" % "ssj" % "2.5",
    "joda-time" % "joda-time" % "2.3"
  )
}

libraryDependencies += "org.jfree" % "jfreechart" % "1.0.19"

libraryDependencies += "org.biojava" % "jcolorbrewer" % "5.2"

dependencyOverrides ++= Set(
//  "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
    "org.jfree" % "jfreechart" % "1.0.19",
    "org.biojava" % "jcolorbrewer" % "5.2"
)

resolvers += "typesafe repo" at " http://repo.typesafe.com/typesafe/releases/"
resolvers += "jitpack" at "https://jitpack.io"

EclipseKeys.withSource := true

Раньше у меня были проблемы со scala 2.11. Стоит ли мне обновляться до 2.11 сейчас?


person bhomass    schedule 12.02.2017    source источник
comment
Боже мой. Нет специалистов по СБТ?   -  person bhomass    schedule 13.02.2017
comment
не могли бы вы поделиться своим build.sbt? также мне любопытно, зачем вам нужна зависимость 2.10   -  person Mysterion    schedule 14.02.2017


Ответы (1)


Вы видите jfreedchart 1.0.13, но это другой. Если вы посмотрите на график зависимости для а именно, вы увидите, что это зависит от "jfree" % "jfreechart" % "1.0.13", а вы хотите использовать "org.jfree" % "jfreechart" % "1.0.19", который не пересекается с предыдущим, так как у них разные groupId. Итак, вам нужно добавить

libraryDependencies += "org.jfree" % "jfreechart" % "1.0.19"

и исключите транзитивные зависимости из визуализации, которые повторяются в вашем пути к классам, выполнив следующие действия:

libraryDependencies += "org.scalanlp" % "breeze-viz_2.10" % "0.3"  exclude("jfree", "jfreechart") exclude("jfree", "jcommon")

Предостережение, это может привести к проблемам, если 1.0.19 не имеет обратной совместимости с 1.0.13.

person Mysterion    schedule 14.02.2017
comment
Вы совершенно правы. 1.0.13 имеет имя группы jfree, но 1.0.19 по-прежнему указан как обновление. Как это может быть? что либа с другим именем группы указана как обновленная версия? В любом случае, две версии имеют одно и то же имя класса, и если у меня есть обе, в проекте все равно будут конфликты. - person bhomass; 14.02.2017
comment
Я пробовал использовать оба, но конфликт версий все еще существует, как я и ожидал. - person bhomass; 14.02.2017
comment
Это действительно способ исправить это. Мне интересно, что, если бы версия по умолчанию и обновленная версия имели один и тот же идентификатор группы, что обычно и бывает. Метод исключения, я думаю, не будет применяться. В таком случае, как бы вы заставили его получить обновленную версию? - person bhomass; 21.02.2017