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
रॉबिन ग्रीन

जवाबों:


69

SBT 0.13.5 के साथ मेरे सिस्टम (उबंटू लिनक्स) पर और कौरसेरा फंक्शनल प्रोग्रामिंग कोर्स के कुछ प्रोजेक्ट्स में सभी कैश फ़ाइलों और डुप्लिकेट स्कैला डाउनलोड्स की वजह से 12 प्रोजेक्ट्स के लिए कुल 2.1GB तक के फोल्डर मिल गए।

वर्तमान एसबीटी आदेश देता है कि काम करें और लगभग सब कुछ साफ कर लें:

sbt clean clean-files

यह शीर्ष स्तर "लक्ष्य" और "lib_managed" फ़ोल्डर को निकालता है (इस मामले में 23MB नीचे 3.2MB) लेकिन परियोजना के तहत कुछ लक्ष्य फ़ोल्डर छोड़ देता है:

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

यह वह जगह है जहाँ लिनक्स कमांड (@ jack-oconnor द्वारा पोस्ट किया गया) बहुत मददगार है:

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

यह हमें वापस अपने एक प्रोजेक्ट के लिए मात्र 444KB में मिल जाता है और 2.1GB 5.0MB तक नीचे चला जाता है!

खिड़कियों में आपके पास उतने उपयोगी कमांड लाइन विकल्प नहीं होंगे, उदाहरण के लिए पथ के नामों में कोई स्टार वाइल्डकार्ड नहीं है, लेकिन आप हमेशा इसे आज़मा सकते हैं और इसके लिए बाध्य कर सकते हैं:

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

सबसे अच्छा मैं स्वचालित रूप से खोजने पर एक DIR कमांड कर सकता हूं:

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

क्या -fखोज आदेश का उपयोग करते समय ध्वज होना आवश्यक है ? अनावश्यक और संभावित रूप से असुरक्षित लगता है।
अनजाने

इसने मेरे लिए ठीक काम किया:find . -name target -type d -exec rm -r {} \;
अनजाने

'Rm' कमांड के "-f" भाग की जरूरत नहीं होनी चाहिए, लेकिन कुछ प्रणालियों पर इसे हटाने की पुष्टि की लंबी सूची के लिए बेहतर हो सकता है।
RudeDude

3
@ अल्बर्टबाइक: शायद sbt clean cleanFilesआपके लिए काम करता है
सर्व-इन

2
sbt क्लीन क्लीनफाइल्स
ठंढ

6

जाहिर है यह जेनकींस जैसे एकीकरण सर्वर पर प्रतिलिपि प्रस्तुत करने योग्य बिल्ड के लिए बहुत महत्वपूर्ण है!

सुनिश्चित करें कि आइवी कैश सहित सभी फाइलें एकीकरण सर्वर कार्यक्षेत्र के भीतर संग्रहीत हैं, कमांड लाइन तर्क जैसे कि sbt को आपूर्ति करके:

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

और फिर जेनकिंस में वाइप आउट वर्कस्पेस बटन पर क्लिक करें, या अन्य एकीकरण सर्वर में बराबर। यह निश्चित रूप से करना चाहिए!

या यदि आप sbt लांचर स्क्रिप्ट के हालिया संस्करण का उपयोग कर रहे हैं, तो आप -no-shareइसके बजाय बस जोड़ सकते हैं ।


यदि आप पहले से ही जेनकिंस का उपयोग कर रहे हैं, तो सफाई प्लग-इन सुनिश्चित करने के लिए एक बढ़िया विकल्प है कि कार्यक्षेत्र साफ़ हो गया है
Ecoe

5

लिनक्स या इसी तरह की तुलना find -nameमें यह बेहतर है , क्योंकि यह गलती से किसी भी निर्देशिका का नाम नहीं हटाएगा targetजो आपके स्रोत कोड में मौजूद हो सकता है:

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

यदि आप इस कमांड को शेल के भीतर चला रहे हैं, तो आपको नियमित अभिव्यक्ति को उद्धृत करने की आवश्यकता होगी, उदाहरण के लिए, बैश के लिए:

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

बीएसडी के साथ (जैसे मैक ओएस एक्स पर) कमांड मिलेगी:

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

2

मैं बहुत अच्छे सुझाए गए समाधानों से सहमत हूं, व्यक्तिगत रूप से मैं एक जनेऊ कार्य के रूप में थोड़ी भिन्नता शामिल करता हूं।

मेकफाइल की सामग्री:

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

और फिर चलाएं:

make clean

मैं प्रलेखन के रूप में कोड के रूप में मेकफाइल्स का उपयोग करना पसंद करता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.