У нас есть собственный плагин, который внутренне использует старую версию игры.Когда он добавляется в SBT, мы получаем странную ошибку разрешения зависимостей:
connect-userdata:connect-userdata_2.11:1.0 [S]
...
+-com.typesafe.play:play-logback_2.11:2.4.8 (error: not found) ..
+-com.typesafe.play:play-logback_2.11:2.5.4 [S]
dependencyGraph
задача показывает com.typesafe.play:play-logback_2.11:2.4.8
как непосредственную зависимость для userdata
проекта.Если плагин удален, все работает нормально. Файл
pom
для плагина имеет следующие зависимости:
<dependency>
<groupId>com.typesafe.play</groupId>
<artifactId>play-ws_2.10</artifactId>
<version>2.4.8</version>
</dependency>
<dependency>
<groupId>com.typesafe.play</groupId>
<artifactId>play-json_2.10</artifactId>
<version>2.4.8</version>
</dependency>
Однако мы ссылаемся на зависимости в нашем проекте следующим образом:
plugins.sbt:
// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.+")
Dependencies.scala
val playVersion: String = play.core.PlayVersion.current
val logback: SettingType = libraryDependencies += "com.typesafe.play" %% "play-logback" % playVersion
Если я подставлю playVersion
просто строкой "2.5.4"
, ошибок не будет.
Итак, я предполагаю, что SBT каким-то образом удается разрешить зависимости дважды: сначала с помощью игры 2.4.8, а затем с 2.5.4
Но почему?Это ошибка или ожидаемое поведение по дизайну?
Есть ли лучший способ выровнять версии игровых фреймворков, на которые ссылаются как на зависимость и как плагин?
Я пробовал это:
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Dependencies.Play.version)
где version="2.5.+"
,но Dependencies
класс недоступен с plugins.sbt
.