Một cách dễ dàng để loại bỏ * mọi thứ * được tạo bởi SBT?


81

Có cách nào dễ dàng để loại bỏ mọi thứ được tạo ra do thực hiện xây dựng SBT không? Hóa ra nó tạo ra các thư mục mục tiêu ở khắp nơi. Biểu diễn

sbt clean clean-cache clean-lib clean-plugins

... không thoát khỏi tất cả.


Tôi cũng muốn xem điều này và đã gửi một vé: code.google.com/p/simple-build-tool/issues/detail?id=166
Landon Kuhn

Trình theo dõi vấn đề đó không còn được sử dụng nữa nên tôi đã gửi lại nó ở đây: github.com/sbt/sbt/issues/896
Robin Green

Câu trả lời:


69

Trên hệ thống của tôi (Ubuntu Linux) với SBT 0.13.5 và một số dự án từ khóa học Lập trình chức năng Coursera, tôi thấy các thư mục có tổng cộng lên đến 2,1GB cho 12 dự án do tất cả các tệp bộ đệm và tải xuống Scala trùng lặp.

Các lệnh SBT hiện tại hoạt động và làm sạch hầu hết mọi thứ là:

sbt clean clean-files

Thao tác này sẽ xóa các thư mục "target" và "lib_managed" cấp cao nhất (23MB xuống còn 3.2MB trong trường hợp này) nhưng để lại một số thư mục đích trong dự án:

./project/project/project/target
./project/project/target
./project/target

Đây là nơi mà lệnh tìm Linux (cũng được đăng bởi @ jack-oconnor) rất hữu ích:

find . -name target -type d -exec rm -rf {} \;

Điều này giúp chúng tôi giảm xuống chỉ còn 444KB cho một trong những dự án của riêng tôi và 2,1GB giảm xuống 5,0MB!

Trong windows, bạn sẽ không có nhiều tùy chọn dòng lệnh hữu ích, chẳng hạn như không có ký tự đại diện dấu sao trong tên đường dẫn, nhưng bạn luôn có thể thử và buộc nó bằng:

rmdir /s /q target project/target project/project/target

Điều tốt nhất tôi có thể làm để tự động tìm là lệnh DIR:

dir /ad /s /b | find "target"

Có nhất thiết phải có -fcờ khi sử dụng lệnh find không? Có vẻ không cần thiết và có khả năng không an toàn.
unjankify

Đây tốt làm việc cho tôi:find . -name target -type d -exec rm -r {} \;
unjankify

Phần "-f" của lệnh 'rm' không cần thiết nhưng trên một số hệ thống, nó có thể thích hợp hơn với một danh sách dài các xác nhận xóa.
RudeDude

3
@AlbertBikeev: có thể phù sbt clean cleanFileshợp với bạn
serv-inc

2
sbt clean cleanFiles
frostcs

6

Rõ ràng điều này rất quan trọng đối với các bản dựng có thể tái tạo trên một máy chủ tích hợp như Jenkins!

Đảm bảo rằng tất cả các tệp, bao gồm cả bộ đệm thường xuân , được lưu trữ trong không gian làm việc của máy chủ tích hợp, bằng cách cung cấp các đối số dòng lệnh như thế này cho sbt:

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

và sau đó nhấp vào nút Xóa không gian làm việc trong Jenkins hoặc nút tương đương trong các máy chủ tích hợp khác. Điều đó chắc chắn nên làm điều đó!

Hoặc nếu bạn đang sử dụng phiên bản gần đây của tập lệnh trình khởi chạy sbt, -no-sharethay vào đó bạn có thể thêm .


Nếu bạn đã sử dụng Jenkins, sau đó các Plugin dọn dẹp là một thay thế tuyệt vời để đảm bảo không gian làm việc sẽ bị xóa
eCoE

5

Trên Linux hoặc tương tự, điều này tốt hơn find -name, vì nó sẽ không vô tình xóa bất kỳ thư mục nào có tên targetcó thể tồn tại trong mã nguồn của bạn:

find . -regextype posix-awk -regex \.(/project)*/target -exec rm -r {} +

Nếu bạn đang chạy lệnh này trong một shell, bạn sẽ cần phải trích dẫn biểu thức chính quy, ví dụ: bash:

find . -regextype posix-awk -regex '\.(/project)*/target' -exec rm -r {} +

Với BSD find (ví dụ trên Mac OS X), lệnh sẽ là:

find -E . -regex \.(/project)*/target -exec rm -r {} +

2

Tôi đồng ý với các giải pháp được đề xuất rất tốt, cá nhân tôi bao gồm một biến thể nhỏ như một nhiệm vụ thực hiện gnu.

nội dung của Makefile:

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

và sau đó chạy:

make clean

Tôi thích sử dụng Makefiles làm mã làm tài liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.