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ď č. 1Problé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.