org - scala sbt install windows
¿Una manera fácil de deshacerse de*todo*generado por SBT? (3)
¿Existe una manera fácil de deshacerse de todo lo que se genera como resultado de la realización de una construcción SBT? Resulta que crea directorios de destino en todo el lugar. Amaestrado
sbt clean clean-cache clean-lib clean-plugins
... no se deshace de todo.
En Linux o similar, esto es mejor que find -name
, ya que no eliminará accidentalmente ningún directorio llamado target
que pueda existir en su código fuente:
find . -regextype posix-awk -regex /.(/project)*/target -exec rm -r {} +
Si está ejecutando este comando dentro de un shell, deberá citar la expresión regular, por ejemplo, para bash:
find . -regextype posix-awk -regex ''/.(/project)*/target'' -exec rm -r {} +
Con BSD find (por ejemplo, en Mac OS X) el comando será:
find -E . -regex /.(/project)*/target -exec rm -r {} +
En mi sistema (Ubuntu Linux) con SBT 0.13.5 y algunos proyectos del curso de Programación Funcional de Coursera encontré que todas las carpetas sumaban hasta 2.1GB para 12 proyectos debido a todos los archivos de caché y las descargas duplicadas de Scala.
Los comandos SBT actuales que funcionan y hacen que casi todo se limpie son:
sbt clean clean-files
Esto elimina las carpetas de "destino" y "lib_managed" de nivel superior (de 23 MB a 3,2 MB en este caso), pero deja algunas carpetas de destino en proyecto:
./project/project/project/target
./project/project/target
./project/target
Aquí es donde el comando find Linux (también publicado por @ jack-oconnor) es muy útil:
find . -name target -type d -exec rm -rf {} /;
Esto nos devuelve a solo 444 KB para uno de mis proyectos y el de 2.1 GB a 5.0 MB.
En Windows no tendrá tantas opciones de línea de comando útiles, por ejemplo, no hay comodines de estrellas en los nombres de ruta, pero siempre puede intentar y forzarlo con:
rmdir /s /q target project/target project/project/target
Lo mejor que puedo hacer para encontrar automáticamente es un comando DIR:
dir /ad /s /b | find "target"
Obviamente, esto es muy importante para compilaciones reproducibles en un servidor de integración como Jenkins.
Asegúrese de que todos los archivos, incluido el caché ivy , estén almacenados dentro del espacio de trabajo del servidor de integración, proporcionando argumentos de línea de comandos como este a sbt:
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy
y luego haga clic en el botón Limpiar área de trabajo en Jenkins, o su equivalente en otros servidores de integración. Eso definitivamente debería hacerlo!
O si está utilizando una versión reciente del script sbt launcher, simplemente puede agregar -no-share
lugar.