Уточнение поведения кросс-версий в Scala

Интересно, в чем разница между ними:

      addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.11.3" cross CrossVersion.full)

// if your project uses multiple Scala versions, use this for cross building
addCompilerPlugin("org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full)

Насколько я понимаю, добавить в библиотеку полную версию Scala, например

      kind-project_2.13.4:0.11.3

и добавить версию Scala Binary, например

      kind-project_2.13:0.11.3

Поэтому я не понимаю, зачем нам cross CrossVersion.full с обоими % и %%, какая разница ?

1 ответ

Я почти уверен, что они одинаковы.

Из переопределения соглашения о публикации :

Параметр crossVersion может переопределить соглашение о публикации:

  • CrossVersion.disabled(без суффикса)
  • (_)
  • CrossVersion.full(_)

По умолчанию либо CrossVersion.binaryили же CrossVersion.diabledв зависимости от значения crossPaths.

Из Подробнее об использовании перекрестных библиотек :

Они эквивалентны:

       "a" %% "b" % "1.0"
("a" % "b" % "1.0").cross(CrossVersion.binary)

Таким образом, в конечном итоге все, что имеет значение, это значение.

Чтобы протестировать , я создал простую задачу в своем build.sbt:

      lazy val getVersion = taskKey[Unit]("A simple task")
getVersion := {
  List(dep1, dep2, dep3, dep4).foreach { d =>
    val att = Seq(d.organization ,d.name ,d.revision ,d.configurations ,d.isChanging ,d.isTransitive ,d.isForce ,d.explicitArtifacts ,d.inclusions ,d.exclusions ,d.extraAttributes ,d.crossVersion ,d.branchName)
    println(att)
  }
}
lazy val dep1 = "org.typelevel" % "kind-projector" % "0.11.3" cross CrossVersion.full
lazy val dep2 = "org.typelevel" %% "kind-projector" % "0.11.3" cross CrossVersion.full
lazy val dep3 = "org.typelevel" % "kind-projector" % "0.11.3"
lazy val dep4 = "org.typelevel" %% "kind-projector" % "0.11.3"

Результат sbt getVersionявляется:

      List(org.typelevel, kind-projector, 0.11.3, None, false, true, false, Vector(), Vector(), Vector(), Map(), Full(, ), None)
List(org.typelevel, kind-projector, 0.11.3, None, false, true, false, Vector(), Vector(), Vector(), Map(), Full(, ), None)
List(org.typelevel, kind-projector, 0.11.3, None, false, true, false, Vector(), Vector(), Vector(), Map(), Disabled(), None)
List(org.typelevel, kind-projector, 0.11.3, None, false, true, false, Vector(), Vector(), Vector(), Map(), Binary(, ), None)

Как видим, все модули эквивалентны, кроме crossVersion, который в обоих dep1, а также dep2является Full(, ). В отличие от двух других, которые Disabled()а также Binary(, ).

Другие вопросы по тегам