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 :

  1. 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.

Author: Oleksandr.Bezhan, 2013-06-19

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

  1. Znajdź, gdzie jest używane resolution-cache - W IvyConfiguration
  2. 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
    
  3. 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 :)

  1. 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")

Https://github.com/sbt/sbt/issues/1208

 9
Author: Ezhik,
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
 6
Author: stefan.schwetschke,
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 / _)
 6
Author: Golly,
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"
 4
Author: jrudolph,
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