¿Existe una manera fácil de deshacerse de todo lo que se genera como resultado de realizar una compilación SBT? Resulta que crea directorios de destino por todas partes. Ejecutando
sbt clean clean-cache clean-lib clean-plugins
... no se deshace de todo.
Respuestas:
En mi sistema (Ubuntu Linux) con SBT 0.13.5 y algunos proyectos del curso de Programación funcional de Coursera, encontré que las carpetas totalizaban hasta 2.1GB para 12 proyectos debido a todos los archivos de caché y descargas de Scala duplicadas.
Los comandos SBT actuales que funcionan y limpian casi todo son:
Esto elimina las carpetas de nivel superior "target" y "lib_managed" (23 MB hasta 3,2 MB en este caso) pero deja algunas carpetas de destino en el proyecto:
Aquí es donde el comando de búsqueda de Linux (también publicado por @ jack-oconnor) es muy útil:
find . -name target -type d -exec rm -rf {} \;
¡Esto nos lleva de nuevo a 444 KB para uno de mis propios proyectos y los 2,1 GB se reducen a 5,0 MB!
En Windows, no tendrá tantas opciones útiles en la línea de comandos, por ejemplo, sin comodines de estrella en los nombres de las rutas, pero siempre puede intentar forzarlo con:
Lo mejor que puedo hacer para buscar automáticamente es un comando DIR:
dir /ad /s /b | find "target"
fuente
-f
bandera cuando se usa el comando de búsqueda? Parece innecesario y potencialmente inseguro.find . -name target -type d -exec rm -r {} \;
sbt clean cleanFiles
funcione para ustedObviamente, esto es muy importante para compilaciones reproducibles en un servidor de integración como Jenkins.
Asegúrese de que todos los archivos, incluida la caché de Ivy , se almacenen dentro del espacio de trabajo del servidor de integración, proporcionando argumentos de línea de comando 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 Wipe Out Workspace en Jenkins, o el equivalente en otros servidores de integración. ¡Eso definitivamente debería hacerlo!
O si está utilizando una versión reciente del script de inicio de sbt, simplemente puede agregar
-no-share
.fuente
En Linux o similar, esto es mejor que
find -name
, ya que no eliminará accidentalmente ningún directorio nombradotarget
que pueda existir en su código fuente:Si está ejecutando este comando dentro de un shell, deberá citar la expresión regular, por ejemplo, para bash:
Con BSD find (por ejemplo, en Mac OS X), el comando será:
find -E . -regex \.(/project)*/target -exec rm -r {} +
fuente
Estoy de acuerdo con las muy buenas soluciones sugeridas, personalmente incluyo una ligera variación como tarea de gnu make.
contenido de Makefile:
y luego ejecuta:
Me gusta usar Makefiles como código como documentación.
fuente