scala - Trabajar sin conexión con las dependencias de SBT y SNAPSHOT
ivy (4)
Nunca he podido trabajar sin conexión con SBT en ninguno de mis proyectos. Ahora estoy en medio de una mudanza y mi servidor de guardarropa-servidor no está en línea.
Así que corriendo digamos:
sbt "set offline := true" run
Me sale entre otros deps desaparecidos:
[error] unresolved dependency: se.hedefalk#lift-utils_3.0_2.10;0.2-SNAPSHOT: not found
Para la dependencia declarada como:
"se.hedefalk" %% ("lift-utils_"+liftEdition) % ("0.2-SNAPSHOT"),
Pero tengo la dependencia en mi caché de hiedra:
$ ll ~/.ivy2/cache/se.hedefalk/lift-utils_3.0_2.10/
total 32
drwxr-xr-x 8 viktor staff 272B Mar 14 11:36 ./
drwxr-xr-x 5 viktor staff 170B Mar 8 10:38 ../
drwxr-xr-x 3 viktor staff 102B Mar 14 11:36 docs/
-rw-r--r-- 1 viktor staff 4.5K Mar 4 15:54 ivy-0.2-SNAPSHOT.xml
-rw-r--r-- 1 viktor staff 4.0K Mar 4 15:54 ivy-0.2-SNAPSHOT.xml.original
-rw-r--r-- 1 viktor staff 1.8K Mar 14 11:36 ivydata-0.2-SNAPSHOT.properties
drwxr-xr-x 3 viktor staff 102B Mar 8 10:38 jars/
drwxr-xr-x 3 viktor staff 102B Mar 14 11:36 srcs/
¿No debería ser suficiente? Todo el conjunto "offline: = true" nunca ha hecho ninguna diferencia para mí. La resolución de dependencia parece ocurrir antes.
Realmente necesito hacer que esto funcione ahora. He tenido problemas con esto durante años, pero ahora estoy en una situación en la que simplemente no puedo trabajar en absoluto.
Aquí: http://www.scala-sbt.org/0.13.5/docs/Detailed-Topics/Dependency-Management-Flow.html
Yo leo
Cuando está fuera de línea: = verdadero, las SNAPSHOT remotas no se actualizarán mediante una resolución, incluso una actualización solicitada explícitamente. Esto debería permitir efectivamente trabajar sin una conexión a repositorios remotos. Se aprecian ejemplos reproducibles que demuestren lo contrario. Obviamente, la actualización debe haberse ejecutado correctamente antes de desconectarse.
Probablemente no entiendo esto correctamente, pero ¿está diciendo que no debería tener el problema que tengo?
Tengo el mismo problema usando:
> sbt "skip in update := true" run
Utilizando sbt 0.13.5
Editar:
Después de tener mi repo en línea nuevamente, resolviendo todos los deps y luego simplemente configurando mi wifi a fuera de línea, puedo salir de sbt y luego ejecutarlo. Sin embargo, solo estoy ejecutando; recargue; limpie; compile y me jodan nuevamente. Y si salgo, ni siquiera puedo iniciar sbt. La resolución de dependencia para el proyecto ocurre antes de que pueda, por ejemplo, intentar analizar el gráfico de dependencia con un árbol de dependencias o similar. Esto es altamente irritante, incluso si no está en línea, por ejemplo, tratando de entender de dónde proviene una dependencia transitiva defectuosa.
A partir de sbt 0.13.7, puede trabajar sin conexión cuando utiliza la memoria caché de dependencia
Para hacerlo corto:
- agregue
updateOptions := updateOptions.value.withCachedResolution(true)
en la configuración de su proyecto (y en la configuración de todos los subproyectos) - ejecute
sbt clean compile
una vez en línea. Se ejecuta como antes, comprobando todas las resoluciones. Pero también cree y almacene el gráfico de dependencia resuelto localmente (en~/.sbt/0.13/dependency
).
Entonces, si no cambia sus dependencias, sbt siempre usará la dependencia en caché y no necesitará red (solo lo intenté)
Esto parece un truco terrible, pero puede especificar su caché de hiedra como un repositorio de hiedra, de modo que una vez que se descarguen sus dependencias, puedan resolverse desde el caché.
Por ejemplo, tus ~ / .sbt / repositories podrían verse así:
[repositories]
local
maven-central
cache: file://${user.home}/.ivy2/cache, [organisation]/[module]/ivy-[revision].xml, [organisation]/[module]/[type]s/[module]-[revision].[type]
Nota: tuve que establecer los patrones de hiedra y artefacto explícitamente. Agregue el caché local debajo de cualquier otro repos para que se prueben primero.
Hay una página wiki aquí: github.com/sbt/sbt/wiki/… , editado en mayo, que dice que la noción de SBT de fuera de línea no es '' t funciona correctamente. Esta puede ser una de las razones por las que su compilación sigue intentando resolver las dependencias frente a los repositorios remotos, incluso cuando se establece la configuración offline
.
Tampoco puedo usarlo en una sola línea.
Pero si comienzo sbt
y luego sbt uso set offline := true
está funcionando bien.