SBT에 의해 생성 된 * 모든 것 *을 제거하는 쉬운 방법은 무엇입니까?


81

SBT 빌드를 수행 한 결과 생성되는 모든 것을 쉽게 제거 할 수있는 방법이 있습니까? 그것은 모든 곳에서 대상 디렉토리를 생성하는 것으로 밝혀졌습니다. 실행할 수 있는

sbt clean clean-cache clean-lib clean-plugins

... 모든 것을 제거하지 않습니다.


저도 이걸보고 싶고 티켓을 제출했습니다 : code.google.com/p/simple-build-tool/issues/detail?id=166
Landon Kuhn

해당 이슈 트래커는 더 이상 사용되지 않으므로 여기에 다시 제출했습니다. github.com/sbt/sbt/issues/896
Robin Green

답변:


69

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"

-ffind 명령을 사용할 때 플래그 가 있어야 합니까? 불필요하고 잠재적으로 안전하지 않은 것 같습니다.
unjankify

이것은 나를 위해 잘 작동했습니다.find . -name target -type d -exec rm -r {} \;
unjankify

'rm'명령의 "-f"부분은 필요하지 않지만 일부 시스템에서는 긴 삭제 확인 목록보다 더 나을 수 있습니다.
RudeDude

3
@AlbertBikeev : 어쩌면 sbt clean cleanFiles당신을 위해 작동
SERV-INC

2
sbt clean cleanFiles
frostcs

6

분명히 이것은 Jenkins와 같은 통합 서버에서 재현 가능한 빌드에 매우 중요합니다!

sbt에 다음과 같은 명령 행 인수를 제공 하여 ivy cache를 포함한 모든 파일 이 통합 서버 작업 공간에 저장 되었는지 확인하십시오 .

-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy

그런 다음 Jenkins 또는 다른 통합 서버에서 동등한 작업 공간 지우기 버튼을 클릭합니다. 확실히해야합니다!

또는 최신 버전의 sbt 실행기 스크립트를 사용하는 경우 -no-share대신 간단히 추가 할 수 있습니다 .


이미 Jenkins를 사용하고 있다면 정리 플러그인 은 작업 공간을
비우는 것의

5

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 {} +

2

나는 아주 좋은 제안 된 솔루션에 동의하며 개인적으로 gnu make 작업으로 약간의 변형을 포함합니다.

Makefile의 내용 :

clean:
    find . -name target | xargs rm -fr

그런 다음 다음을 실행하십시오.

make clean

저는 Makefile을 문서로 코드로 사용하는 것을 좋아합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.