/ / Ak mám zostavený multi-projekt SBT, ako môžem dosiahnuť, aby testovacie závislosti A nevnikli do testov B - scala, testovanie, závislosti, sbt

Ak mám zostavenie viacerých projektov SBT, ako môžem urobiť testovacie závislosti A tak, aby neprenikli do testov B - škála, testovanie, závislosti, sbt

Mám teda projekt SBT s modulmi A a B.

  • A závisí od B.
  • Bežné projektové balíčky A a B sú kompatibilné.
  • A má balík na testovanie, ktorý nie je kompatibilný s balíkom B používa na testy.
  • A nezávisí od testovacích balíkov skupiny B.
  • Testy „A“ zlyhajú z dôvodu nekompatibility testovacieho balíka

Podľa môjho názoru je toto zlyhanie neplatné, pretože testy typu „A“ nezávisia od testov typu „B“.

Používam

A.dependsOn(B % "compile->compile;test->compile")

zmysel

  • Kompilácia typu „A“ závisí od kompilácie typu „B“
  • Test „A“ závisí od kompilácie B.

Robím niečo zlé?

Toto je skutočné zostavenie súboru. Relevantný projekt je doobieSupport23 záleží na core

Tu je chyba zostavenia. Vidíte, že to vťahuje scalaz 7.2 do buildu, ale malo by to byť len ťahanie scalaz 7.1.6

odpovede:

0 pre odpoveď č. 1

Problém určite nie je v projektoch, ktoré závisia od seba, od konfigurácie "compile->compile;test->compile", ako sa mi zdá, je úplne platná pre to, čo musíte dosiahnuť.

Čo spôsobuje problém, je to, že libraryDependencies sú zdieľané kvôli tomu, že A je závislý na B. Našťastie sbt umožňuje pomerne presne spravovať závislosti.

Najjednoduchším návrhom by bolo použiť novšiu verziu konfliktnej závislosti na čo najužší rozsah - to znamená, ak je scalaz 7.2.0 potrebný iba pri základných testoch, tak to bude!

lazy val core = project(...)
.settings(libraryDependencies in Test += "org.scalaz" %% "scalaz" % "7.2.0")
lazy val doobieSupport23 = project(...).dependsOn(core)
.settings(libraryDependencies in Test += "org.scalaz" %% "scalaz" % "7.1.6")

Ak to nemôžete dosiahnuť, pretože novšia verzia sa skutočne používa v závislostiach iných jadier, môže to urobiť nasledujúci trik:

val scalazOld = "org.scalaz" %% "scalaz" % "7.1.6"
val scalazNew = "org.scalaz" %% "scalaz" % "7.2.0"

lazy val core = project(...)
.settings(libraryDependencies += "org.scalaz" %% "scalaz" % "7.2.0")

lazy val doobieSupport23 = project(...).dependsOn(core)
.settings(
libraryDependencies in Test += "org.scalaz" %% "scalaz" % "7.1.6" force()
)

Poznámka: force() kombinátor. Nie som si istý, či to tak za behu zlyhá kvôli nekompatibilným triedam v triede cesty.


0 pre odpoveď č. 2

To, čo som uviedol v čísle, funguje presne podľa očakávaní.

Problém nakoniec bol v tom, že môj zostavovací súbor mal cudziu závislosť, ktorú som práve prebral. Táto závislosť spôsobovala zatiahnutie doobie 3.0, kde som očakával iba doobie 2.3.