SBT 빌드를 수행 한 결과 생성되는 모든 것을 쉽게 제거 할 수있는 방법이 있습니까? 그것은 모든 곳에서 대상 디렉토리를 생성하는 것으로 밝혀졌습니다. 실행할 수 있는
sbt clean clean-cache clean-lib clean-plugins
… 모든 것을 제거하지 않습니다.
답변
SBT 0.13.5가있는 내 시스템 (Ubuntu Linux)과 Coursera Functional Programming 과정의 일부 프로젝트에서 모든 캐시 파일과 중복 된 Scala 다운로드로 인해 12 개 프로젝트에 대해 총 2.1GB의 폴더가 발견되었습니다.
작동하고 거의 모든 것을 정리 하는 현재 SBT 명령 은 다음과 같습니다.
sbt clean clean-files
이렇게하면 최상위 “target”및 “lib_managed”폴더 (이 경우 23MB에서 3.2MB까지)가 제거되지만 일부 대상 폴더는 프로젝트 아래에 남습니다.
./project/project/project/target
./project/project/target
./project/target
Linux find 명령 (@ jack-oconnor도 게시 함)이 매우 유용합니다.
find . -name target -type d -exec rm -rf {} \;
이로 인해 내 프로젝트 중 하나에 대해 444KB에 불과하고 2.1GB는 5.0MB로 줄어 듭니다!
Windows에서는 유용한 명령 줄 옵션이 많지 않습니다. 예를 들어 경로 이름에 별표 와일드 카드가 없지만 다음과 같이 항상 시도하고 강제 할 수 있습니다.
rmdir /s /q target project/target project/project/target
자동으로 찾을 수있는 최선의 방법은 DIR 명령입니다.
dir /ad /s /b | find "target"
답변
분명히 이것은 Jenkins와 같은 통합 서버에서 재현 가능한 빌드에 매우 중요합니다!
sbt에 다음과 같은 명령 행 인수를 제공 하여 ivy cache를 포함한 모든 파일 이 통합 서버 작업 공간에 저장 되었는지 확인하십시오 .
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy
그런 다음 Jenkins 또는 다른 통합 서버에서 동등한 작업 공간 지우기 버튼을 클릭합니다. 확실히해야합니다!
또는 최신 버전의 sbt 실행기 스크립트를 사용하는 경우 -no-share
대신 간단히 추가 할 수 있습니다 .
답변
Linux 또는 이와 유사한 경우 소스 코드에있을 수있는 find -name
이름의 디렉토리를 실수로 제거하지 않기 때문에이 방법이보다 낫습니다 target
.
find . -regextype posix-awk -regex \.(/project)*/target -exec rm -r {} +
셸 내에서이 명령을 실행하는 경우 정규식을 인용해야합니다 (예 : bash의 경우).
find . -regextype posix-awk -regex '\.(/project)*/target' -exec rm -r {} +
BSD find (예 : Mac OS X)를 사용하면 명령은 다음과 같습니다.
find -E . -regex \.(/project)*/target -exec rm -r {} +
답변
나는 아주 좋은 제안 된 솔루션에 동의하며 개인적으로 gnu make 작업으로 약간의 변형을 포함합니다.
Makefile의 내용 :
clean:
find . -name target | xargs rm -fr
그런 다음 다음을 실행하십시오.
make clean
저는 Makefile을 문서로 코드로 사용하는 것을 좋아합니다.