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ả.
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ả.
Câu trả lời:
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"
-f
cờ 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.
find . -name target -type d -exec rm -r {} \;
sbt clean cleanFiles
hợp với bạn
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-share
thay vào đó bạn có thể thêm .
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 target
có 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 {} +
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.