Dlaczego sbt uruchamia rozwiązywanie zależności za każdym razem po wyczyszczeniu?
SBT uruchamia rozwiązywanie zależności za każdym razem po clean
, nawet jeśli Konfiguracja zarządzania zależnościami projektu nie uległa zmianie. Jest to czasochłonne podczas pracy na serwerze CI.
Ale dokumentacja mówi :
- zwykle, jeśli żadna konfiguracja zarządzania zależnościami nie uległa zmianie od ostatniego udanego rozwiązania, a pobrane pliki są nadal obecnie sbt nie prosi Ivy o wykonanie rozdzielczości.
Jak mogę zatrzymać sbt od rozwiązywania zależności za każdym razem, gdy buduję projekt z sbt clean publish-local
?
Update
Odkryłem, że sbt uruchamia również rozdzielczość, gdy wchodzę w tryb interaktywny z sbt
.
Update2
Jak wskazałem @Ezhik
Jeśli mogę zachować target/resolution-cache
to sbt nie rozwiąże zależności po wyczyszczeniu.
Więc starałem się przenieść resolution-cache
z target dir:
ivyConfiguration <<= (externalResolvers, ivyPaths, offline, checksums, appConfiguration, target, streams) map { (rs, paths, off, check, app, t, s) =>
val resCacheDir = t / ".." / "resolution-cache"
new InlineIvyConfiguration(paths, rs, Nil, Nil, off, Option(lock(app)), check, Some(resCacheDir), s.log)
}
Teraz z tym kodem w Build.scala
resolution cache jest umieszczony w katalogu głównym projektu i dlatego jest zachowany po clean
, ale rozdzielczość i tak jest robiona. Zakładam więc, że takie podejście jest błędne lub niewystarczające.
4 answers
Ze względu na katalog target/resolution-cache
, który zawiera raporty Ivy. Oczywiście usuwa się całą zawartość {[6] } podczas operacji clean
.
IMHO musisz skierować go w swoim projekcie gdzieś poza target
Jeśli chcesz zachować stan rozdzielczości.
Aktualizacja.
Vs SBT.0.12.4.RC1
- Znajdź, gdzie jest używane
resolution-cache
- W IvyConfiguration -
Sprawdź, gdzie znajduje się IvyConfiguration-w projekcie zakres
> inspect ivy-configuration [info] Task: sbt.IvyConfiguration [info] Description: [info] General dependency management (Ivy) settings, such as the resolvers and paths to use. [info] Provided by: [info] {file:/home/ezh/projects/sbt/}xsbt/*:ivy-configuration [info] Dependencies: [info] xsbt/*:offline
-
Napraw to w build.sbt.
ivyConfiguration <<= (ivyConfiguration, baseDirectory) map { case (c: InlineIvyConfiguration, b) => import c._ new InlineIvyConfiguration(paths, resolvers, otherResolvers, moduleConfigurations, localOnly, lock, checksums, resolutionCacheDir.map(_ => b / "123"), log) case (other, _) => other // something unknown }
4 Test... Ups... rozdzielczość jest nadal aktywna... Zbadaj to. ->
target/scala-2.10/cache/default-920e5d/global/update/output
cache zawiera wskaźniki do resolution-cache
:)
-
Napraw to.
cacheDirectory <<= baseDirectory / "234"
Test. Rozumiem. Rozdzielczość jest pomijana.
Podsumowanie zmian dla wymaganej konfiguracji:
ivyConfiguration <<= (ivyConfiguration, baseDirectory) map {
case (c: InlineIvyConfiguration, b) => import c._
new InlineIvyConfiguration(paths, resolvers, otherResolvers, moduleConfigurations,
localOnly, lock, checksums, resolutionCacheDir.map(_ => b / "123"), log)
case (other, _) => other // something unknown
}
cacheDirectory <<= baseDirectory / "234"
Vs SBT.0.13.x
@deprecated("Use the cacheDirectory provided by streams.", "0.13.0")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-24 04:39:06
Może być tak, że masz zależności migawkowe. Mogą one ulec zmianie w każdej chwili, więc muszą być rozwiązane na każdym biegu. Możesz to stłumić za pomocą
offline := true
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-19 12:36:50
To działa dla mnie na 0.13.1.
cleanKeepFiles ++= Seq("resolution-cache", "streams").map(target.value / _)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-14 12:40:13
Możesz zapobiec clean
usuwaniu niektórych plików za pomocą tego ustawienia:
// path should be adapted for newer sbt versions
cleanKeepFiles <+= cacheDirectory / "update"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-15 09:25:59