एसबीटी (सॉफ्टवेयर)

From Vigyanwiki
sbt
Original author(s)Mark Harrah
Developer(s)Eugene Yokota and community
Stable release
1.9.0[1] / June 2, 2023; 11 months ago (2023-06-02) [2]
Written inScala
Operating systemCross-platform
PlatformJava
TypeBuild automation
LicenseBSD License
Websitescala-sbt.org

एसबीटी (मूल रूप से सरल बिल्ड टूल, आजकल प्रायः स्काला बिल्ड टूल के लिए माना जाता है या इसे अपने उचित नाम के रूप में उपयोग किया जाता है)[3] ओपन-सोर्स सॉफ्टवेयर है जो स्पष्ट रूप से स्काला (प्रोग्रामिंग लैंग्वेज) और जावा (प्रोग्रामिंग लैंग्वेज) प्रोजेक्ट के लिए बनाया गया है। अतः इसका उद्देश्य बिल्ड, कम्पाइलिंग, परीक्षण स्वचालन और पैकेजिंग अनुप्रयोगों, लाइब्रेरी और संरचना की प्रक्रिया को सुव्यवस्थित करना है। एसबीटी अत्यधिक अनुकूलनीय है, जो डेवलपर्स को अपने प्रोजेक्ट की विशिष्ट आवश्यकताओं के अनुसार बिल्ड प्रक्रिया को अनुकूलित करने की अनुमति देता है।

अतः एसबीटी स्काला प्रोजेक्ट के बिल्ड और प्रबंधन की प्रक्रिया को सरल और कुशल बनाने के लिए सुविधाओं की विस्तृत श्रृंखला प्रदान करता है।[4] इस प्रकार से कुछ प्रमुख विशेषताओं में सम्मिलित हैं:

  • निर्भरता प्रबंधन: प्रोजेक्ट निर्भरता को स्वचालित रूप से डाउनलोड करने और संभालने की अपनी क्षमता के माध्यम से, एसबीटी बाह्य लाइब्रेरी और संरचना के उपयोग की सुविधा प्रदान करता है।
  • वृद्धिशील संकलन: एसबीटी कोड के मात्र उन भागों को पुन: संकलित कर सकता है जो बदल गए हैं, जिसके परिणामस्वरूप विकास चक्र के समय महत्वपूर्ण समय की बचत होती है।
  • अनुकूलन योग्य बिल्ड प्रक्रिया: एसबीटी अत्यधिक अनुकूलन योग्य है, जो डेवलपर्स को कस्टम बिल्ड सेटिंग्स को परिभाषित करने और अपनी प्रोजेक्ट की अद्वितीय आवश्यकताओं के साथ संरेखित करने के लिए बिल्ड प्रक्रिया को कॉन्फ़िगर करने की अनुमति देता है।
  • प्लग-इन (कंप्यूटिंग) पारिस्थितिकी तंत्र: एसबीटी प्लगइन पारिस्थितिकी तंत्र का अनुरोध करता है जो इसकी कार्यक्षमता को बढ़ाता है, जिसमें कोड गुणवत्ता जांच, परिनियोजन स्वचालन और परीक्षण कवरेज रिपोर्ट जैसी अतिरिक्त सुविधाएं सम्मिलित होती हैं। अतः नवीन प्लगइन्स के विकास और एकीकरण को पूर्ण रूप से समर्थित और प्रोत्साहित किया जाता है।
  • निरंतर एकीकरण: एसबीटी के साथ, जब भी कोई स्रोत फ़ाइल बदली जाती है, तो डेवलपर्स प्रणाली को स्वचालित रूप से पुन: संकलित करने और परीक्षणों को पुन: चलाने के लिए समूहित कर सकते हैं।
  • बहु-प्रोजेक्ट बिल्ड: कई स्काला प्रोजेक्ट पर कार्य करने वाले डेवलपर्स के लिए, एसबीटी उन्हें ही बिल्ड के भीतर प्रबंधित करने के लिए सहायक सुविधाएँ प्रदान करता है।
  • रीड-इवल-प्रिंट लूप: एसबीटी अन्योन्य क्रिया शेल से सुसज्जित है, जो डेवलपर्स को विकास प्रक्रिया के समय कार्यों और आदेशों को निष्पादित करने के लिए सुविधाजनक तरीका प्रदान करता है।
  • समानांतर कार्य निष्पादन: एसबीटी समानांतर में कार्यों को निष्पादित कर सकता है, जिससे बड़ी प्रोजेक्ट के बिल्ड समय में तीव्रता आती है।
  • आईडीई के साथ एकीकरण: विकास अनुभव को अनुकूलित करने के लिए, एसबीटी लोकप्रिय एकीकृत विकास वातावरण (आईडीई) जैसे इंटेलिज आइडिया और विजुअल स्टूडियो कोड के साथ सरलता से एकीकृत होता है।

इस प्रकार से एसबीटी स्काला समुदाय में वास्तविक मानक उपकरण है,[5] जिसका उपयोग, उदाहरण के लिए, स्वयं स्काला 2 और स्काला 3 कंपाइलर,[6][7] प्ले फ्रेमवर्क और लोकप्रिय शतरंज सर्वर, लाइकेस द्वारा किया जाता है। अतः एसबीटी प्रोजेक्ट बूटस्ट्रैप्ड है - यह स्वयं को बनाने के लिए एसबीटी का उपयोग करता है और डॉगफूडिंग को एक धनात्मक विशेषता मानता है।

इतिहास

एसबीटी को मूल रूप से 2008 में मार्क हर्राह द्वारा ओपन-सोर्स प्रोजेक्ट के रूप में जारी किया गया था।[8] इन वर्षों में, यह कई रिलीज़ों के माध्यम से महत्वपूर्ण रूप से विकसित हुआ है, जिनमें से प्रत्येक में नवीन सुविधाएँ, बग फिक्स और संवर्द्धन सम्मिलित हैं। इस प्रकार से यहां महत्वपूर्ण रिलीज़ों के साथ-साथ उनके द्वारा प्रस्तुत किए गए प्रमुख परिवर्तनों और नवाचारों का अवलोकन दिया गया है:[9]

  1. एसबीटी 0.3.2 (2008): यह एसबीटी की प्रथम आधिकारिक रिलीज़ थी। अतः इसने परियोजना परिभाषा, निर्भरता प्रबंधन और संकलन जैसी प्राथमिक विशेषताएं प्रस्तुत कीं थी।
  2. एसबीटी 0.7 (2009): स्काला प्रोजेक्ट के बिल्ड और प्रबंधन के लिए मूलभूत संरचना को स्थापित किया गया था। मुख्य विशेषताओं में वृद्धिशील संकलन, निर्भरता प्रबंधन और प्रत्यक्ष कार्य निष्पादन सम्मिलित हैं।
  3. एसबीटी 0.10 (2011): बिल्ड डेफिनिशन सिंटैक्स में महत्वपूर्ण बदलाव प्रस्तुत किया गया था, जिससे यह अधिक अभिव्यंजक और नम्य बन गया। निष्पादन, निर्भरता प्रबंधन और कॉन्फ़िगरेशन में भी वृद्धि हुई थी।
  4. एसबीटी 0.12 (2012): बहु-मॉड्यूल प्रोजेक्ट के लिए स्पष्ट समर्थन, कस्टम कॉन्फ़िगरेशन को परिभाषित करने की क्षमता और सरलीकृत प्लगइन विकास।
  5. एसबीटी 0.13 (2013): प्रयोज्यता और निष्पादन पर ध्यान केंद्रित। इस संस्करण में प्रोजेक्ट बनाने और प्रबंधित करने के लिए[10] एक वेब-आधारित टूल एक्टिवेटर प्रस्तुत किया गया। अन्य विशेषताओं में वृद्धिशील मैक्रो संकलन, बिल्ड परिभाषा त्रुटियों की स्पष्ट हैंडलिंग और विभिन्न निष्पादन अनुकूलन सम्मिलित हैं। 0.13 अगले चार वर्षों तक मुख्य एसबीटी संस्करण बना रहा था।
  6. एसबीटी 1.0 (2017): निष्पादन और स्थिरता पर ध्यान केंद्रित करते हुए एसबीटी कोडबेस में पर्याप्त बदलाव किए गए, परन्तु यथासंभव प्राचीन संस्करणों के साथ संगतता बनाए रखने का भी प्रयास किया गया। इस प्रकार से नवीन सुविधाओं में कार्यों और सेटिंग्स को परिभाषित करने के लिए एकीकृत स्लैश सिंटैक्स, स्पष्ट निर्भरता प्रबंधन और बिल्ड परिभाषाओं के लिए उपयोग किए जाने वाले लैंग्वेज संस्करण के रूप में स्काला 2.12 सम्मिलित हैं। इसके अतिरिक्त, नवीन जिंक 1.0 वृद्धिशील कंपाइलर पर स्विच करने से वृद्धिशील संकलन निष्पादन में और वृद्धि हुई।[11]
  7. एसबीटी 1.1 (2018): इस रिलीज ने एसबीटी सर्वर जारी किया, जिससे आईडीई और अन्य टूल लैंग्वेज सर्वर प्रोटोकॉल (एलएसपी) के माध्यम से एसबीटी के साथ परस्पर क्रिया कर सके। इसने स्काला.जेएस[12] और स्काला नेटिव[13] के लिए अनुप्रस्थ-बिल्डिंग समर्थन भी जोड़ा और विभिन्न कार्यों के निष्पादन में सुधार किया।
  8. एसबीटी 1.3 (2019): इस संस्करण ने कौरसियर को डिफ़ॉल्ट निर्भरता प्रबंधक के रूप में अपनाकर निर्भरता हल को तीव्र करके[14] उपयोगकर्ता अनुभव में उल्लेखनीय रूप से सुधार किया। आगे के संवर्द्धन में बिल्ड कैशिंग तंत्र में सुधार और जेडीके 11 के लिए समर्थन सम्मिलित है।
  9. एसबीटी 1.5 (2021): स्काला 3 के लिए समर्थन जोड़ा गया था। बीएसपी (बिल्ड सर्वर प्रोटोकॉल) समर्थन में भी संवर्द्धन किया गया,[15] जिससे आईडीई के साथ स्पष्ट एकीकरण संभव हो सका।
  10. एसबीटी 1.8 (2022): यह रिलीज़ कौरसियर में अपडेट लेकर आई और आइवी समर्थन में सुधार हुआ।
  11. एसबीटी 1.9 (2023): नवीन प्रोजेक्ट बनाने में सहायता के लिए कौरसियर में अधिक अपडेट और टेक्स्ट-आधारित मेनू।

फ़ाइल बिल्ड

इस प्रकार से एक एसबीटी बिल्ड को .sbt का उपयोग करके परिभाषित किया जा सकता है,[16] नीचे build.sbtबिल्ड परिभाषा का एक उदाहरण दिया गया है:

val scalaTest   = "org.scalatest" %% "scalatest" % "3.2.14"
val akkaVersion = "2.6.20"
val akkaActor   = "com.typesafe.akka" %% "akka-actor" % akkaVersion
val akkaCluster = "com.typesafe.akka" %% "akka-cluster" % akkaVersion

// Set the Scala version used by this build to 2.13.10.
ThisBuild / scalaVersion := "2.13.10"
ThisBuild / version      := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"

lazy val root = (project in file("."))
  .aggregate(helloCore)
  .dependsOn(helloCore)
  .settings(
    name := "Hello",
    // Add a single dependency, for tests.
    libraryDependencies += scalaTest % Test
  )

lazy val helloCore = (project in file("core"))
  .settings(
    name := "Hello Core",
    libraryDependencies += scalaTest % Test,
    // Add multiple dependencies.
    libraryDependencies ++= List(akkaActor, akkaCluster)
  )

उदाहरण उपयोग

प्रत्येक बिल्ड कमांड के लिए एसबीटी लागू किया जा सकता है, या यदि कोई कमांड नहीं दिया गया है तो यह अन्योन्य क्रिया मोड में प्रवेश कर सकता है। इस प्रकार से वर्तमान बिल्ड के बिल्ड उत्पादों को स्पष्ट करने के लिए:

$ sbt clean

एक ही श्रेणी पर एकाधिक कमांड का उपयोग किया जा सकता है। इस प्रकार से फू नामक एकल परीक्षण चलाने और फिर निर्यातित जार प्रकाशित करने के लिए:

$ sbt "testOnly Foo" publish

विस्तारशीलता और एकीकरण

अतः एसबीटी की कार्यक्षमता को प्लगइन संरचना के माध्यम से बढ़ाया जा सकता है।[17] समुदाय-योगदान वाले प्लगइन्स हस्ताक्षर, पैकेजिंग, प्रकाशन और कलाकृतियों को जारी करने, ब्लॉग और डेटाबेस जैसी अन्य सेवाओं से जुड़ने या अन्य प्रौद्योगिकियों के साथ एकीकृत करने जैसे क्षेत्रों को आच्छादित करते हैं।

इस प्रकार से इंटेलिज आईडिया और वीएस कोड दोनों अपने स्काला प्लगइन्स के माध्यम से एसबीटी का समर्थन करते हैं। अतः उन दोनों आईडीई में, प्रारंभिक एसबीटी बिल्ड फ़ाइलों के साथ नवीन प्रोजेक्ट बनाना संभव है, साथ ही यदि प्रोजेक्ट में पूर्व से ही एसबीटी बिल्ड फ़ाइल सम्मिलित है, तो इसका उपयोग दिए गए आईडीई के लिए प्रोजेक्ट की कॉन्फ़िगरेशन उत्पन्न करने के लिए किया जा सकता है।

तुलना

अतः बिल्ड टूल के मध्य एसबीटी के मुख्य विकल्प ग्रैडल और अपाचे मावेन हैं, दोनों जेवीएम प्लेटफॉर्म पर विकसित प्रोजेक्ट के लिए स्थापित बिल्ड टूल हैं। स्काला पारिस्थितिकी तंत्र में, अन्य लोकप्रिय बिल्ड उपकरण मिल है।[18] इस प्रकार से एसबीटी, ग्रैडल, अपाचे मावेन और मिल के मध्य का चुनाव, आपके प्रोजेक्ट की विशिष्ट आवश्यकताओं और टूल के साथ आपकी परिचितता पर निर्भर करता है। यदि आप मुख्य रूप से स्काला के साथ कार्य कर रहे हैं, तो एसबीटी या मिल स्पष्ट विकल्प सिद्ध हो सकता है, जबकि यदि आप कई लैंग्वेजों या प्रौद्योगिकियों के साथ कार्य कर रहे हैं, तो अन्य दो में से स्पष्ट विकल्प हो सकता है।

एसबीटी ग्रैडल मावेन मिल
लैंग्वेज और लक्षित दर्शक विशेष रूप से स्काला और जावा परियोजनाओं के लिए डिज़ाइन किया गया। ऐसी सुविधाएँ प्रदान करता है जो स्काला पारिस्थितिकी तंत्र की विशिष्ट आवश्यकताओं को पूर्ण करती हैं। स्काला परियोजनाओं में इसका सबसे अधिक उपयोग देखा जाता है। सामान्य प्रयोजन, जावा, ग्रूवी, कोटलिन, स्काला और अन्य सहित कई लैंग्वेजों का समर्थन करता है। जावा और कोटलिन परियोजनाओं में इसका सबसे अधिक उपयोग देखा जाता है। जावा परियोजनाओं के लिए उपयोग किया जाता है, परन्तु स्काला, ग्रूवी और कोटलिन जैसे प्लगइन्स के माध्यम से अन्य प्रोग्रामिंग लैंग्वेजों का भी समर्थन कर सकता है। जावा प्रोजेक्ट में इसका सबसे अधिक उपयोग देखा जाता है। मुख्य रूप से स्काला को लक्षित करता है, परन्तु इसमें मिश्रित स्काला/जावा परियोजनाओं में जावा कोड संकलित करने के लिए समर्थन है। स्काला परियोजनाओं में इसका सबसे अधिक उपयोग देखा जाता है और यह विशेष रूप से उन डेवलपर्स के लिए आकर्षक है जो अपने बिल्ड उपकरण में सरलता और पूर्वानुमेयता को महत्व देते हैं।
फ़ाइल सिंटैक्स बिल्ड बिल्ड फ़ाइलें स्काला में लिखी जाती हैं, बिल्ड परिभाषा के समय स्काला की अभिव्यक्ति और प्रकार की सुरक्षा का लाभ उठाती हैं। बिल्ड फ़ाइलें ग्रूवी या कोटलिन में लिखी जा सकती हैं। सिंटैक्स अधिक घोषणात्मक होने की ओर आश्रित होता है। प्रोजेक्ट ऑब्जेक्ट मॉडल (पीओएम) फ़ाइलें लिखने के लिए एक्सएमएल का उपयोग करता है। सिंटैक्स अधिक क्रियात्मक और घोषणात्मक है, जो एक मानकीकृत परियोजना संरचना और कॉन्फ़िगरेशन पर एक कन्वेंशन का पक्ष लेता है। अपनी बिल्ड फ़ाइलों के लिए सरलता स्काला का उपयोग करता है। इसकी बिल्ड परिभाषाएँ स्काला ऑब्जेक्ट परिभाषाओं के रूप में लिखी जाती हैं और कार्यों को उन ऑब्जेक्ट के भीतर विधियों के रूप में परिभाषित किया जाता है।
वृद्धिशील संकलन वृद्धिशील संकलन की सुविधा, कोड के मात्र उन अनुभागों को संकलित करना जो बदल गए हैं और इस प्रकार विकास प्रक्रिया को गति देते हैं। जावा और कोटलिन परियोजनाओं के लिए वृद्धिशील संकलन का भी समर्थन करता है, परन्तु स्काला वृद्धिशील संकलन के लिए इसकी क्षमता एसबीटी के जैसे विकसित नहीं है। डिफ़ॉल्ट रूप से, यह वृद्धिशील संकलन का समर्थन नहीं करता है। इसे स्काला प्रोजेक्ट के लिए स्काला-मेवेन-प्लगइन जैसे प्लगइन्स या जावा प्रोजेक्ट के लिए जावा-कंपाइलर-प्लगइन के वृद्धिशील संकलन सुविधा के माध्यम से सक्षम किया जा सकता है। विशेषताएं वृद्धिशील संकलन इसके अतिरिक्त, प्रत्येक कार्य के लिए कार्य आउटपुट और पृथक वातावरण की आक्रामक कैशिंग का उपयोग किया जाता है, जो बिल्ड की गति और यथार्थता को और स्पष्ट बनाता है।
एक्स्टेंसिबिलिटी और प्लगइन्स एक व्यापक प्लगइन पारिस्थितिकी तंत्र प्रदान करता है, जो डेवलपर्स को बिल्ड टूल की कार्यक्षमता को बढ़ाने की अनुमति देता है। कई लैंग्वेजों और प्लेटफार्मों पर इसकी व्यापक स्वीकृति के कारण, ग्रैडल का प्लगइन पारिस्थितिकी तंत्र एसबीटी की तुलना में अधिक व्यापक और विविध है। अपने व्यापक इतिहास और जावा समुदाय के भीतर व्यापक स्वीकृति के कारण एसबीटी की तुलना में इसका प्लगइन पारिस्थितिकी तंत्र बड़ा और अधिक परिपक्व है। इसमें एसबीटी की तुलना में छोटा प्लगइन इकोसिस्टम है, परन्तु एक अलग विधि से एक्स्टेंसिबिलिटी का समर्थन करता है:

मिल में, आप पुन: प्रयोज्य मॉड्यूल और लाइब्रेरी को प्रत्यक्षतः अपनी बिल्ड फ़ाइलों में, सरल स्काला में परिभाषित कर सकते हैं। आप अपनी बिल्ड फ़ाइलों में तृतीय-पक्ष स्काला लाइब्रेरी को आयात और उपयोग भी कर सकते हैं।

निष्पादन वृद्धिशील संकलन और समानांतर कार्य निष्पादन जैसे निष्पादन अनुकूलन को नियोजित करता है, परन्तु परिणाम परियोजना की जटिलता और विशिष्ट उपयोग के स्थितियों के आधार पर भिन्न होते हैं। बिल्ड में तीव्रता लाने के लिए पृष्ठभूमि में चल रही डेमॉन प्रक्रिया का उपयोग करते हुए, निष्पादन पर बल देता है। डिफ़ॉल्ट रूप से, यह वृद्धिशील संकलन, न ही समानांतर निष्पादन का समर्थन नहीं करता है। दोनों को प्लगइन्स और बिल्ड टूल विकल्पों का उपयोग करके प्राप्त किया जा सकता है। वृद्धिशील संकलन और समानांतर निष्पादन का समर्थन करता है। सामान्यतः इसे कैशिंग के लिए अधिक आक्रामक दृष्टिकोण अपनाने के लिए माना जाता है, जो प्रायः एसबीटी की तुलना में तीव्रता से वृद्धिशील बिल्ड समय की ओर ले जाता है, विशेषकर बड़ी परियोजनाओं के लिए।
जीवन चक्र बिल्ड बिल्ड परिभाषाओं के लिए जटिल डीएसएल (डोमेन विशिष्ट लैंग्वेज) का उपयोग करता है, जो बिल्ड प्रक्रिया पर अधिक विस्तृत नियंत्रण प्रदान करता है। इसका डीएसएल एसबीटी की तुलना में सरल है, अधिक घोषणात्मक है और प्रारंभिक लोगों के लिए अधिक सहज समझ सकते है। एक निश्चित बिल्ड जीवनचक्र का परिचय देता है जिसमें संकलन, परीक्षण, पैकेज, इंस्टॉल आदि जैसे ठीक रूप से परिभाषित चरण सम्मिलित हैं। इसके माध्यम से, मावेन परियोजनाओं में एक सुसंगत संरचना प्रदान करता है परन्तु नम्यता का अभाव है। बिल्ड को कार्यों के संदर्भ में परिभाषित किया गया है। प्रत्येक कार्य किसी बिल्ड में कार्य की एक इकाई का प्रतिनिधित्व करता है, जैसे मॉड्यूल संकलित करना, परीक्षण चलाना, पैकेज बनाना आदि। कार्य अन्य कार्यों पर निर्भर हो सकते हैं। मिल कार्यों को उचित क्रम में चलाने का ध्यान रखती है।
समुदाय इसका एक सक्रिय, सहायक समुदाय है, जो मुख्य रूप से स्काला प्रोग्रामिंग लैंग्वेज पर केंद्रित है। इसका समुदाय एसबीटी की तुलना में अधिक व्यापक और विविध है, जो विभिन्न प्रोग्रामिंग लैंग्वेजों और प्रौद्योगिकियों पर ध्यान केंद्रित करता है। इसका समुदाय बड़ा और अधिक विविध है, जो कई प्रोग्रामिंग लैंग्वेजों और प्रौद्योगिकियों को संबोधित करता है। मिल एक सक्रिय रूप से विकसित ओपन-सोर्स प्रोजेक्ट है। इसके निकट का समुदाय एसबीटी के निकट के समुदाय जितना बड़ा या स्थापित नहीं है, परन्तु यह सक्रिय और व्यस्त है।

यह भी देखें

संदर्भ

  1. sbt - Download
  2. eed3si9n (2023-06-02). "Announce: sbt 1.9.0". eed3si9n.com. Retrieved 2023-06-12.
  3. "sbt Reference Manual — Frequently Asked Questions". www.scala-sbt.org. Retrieved 2023-06-15.
  4. "sbt Reference Manual — sbt Reference Manual". www.scala-sbt.org. Retrieved 2023-06-15.
  5. "मिलकर बेहतर सॉफ्टवेयर बनाएं". GitHub (in English). Retrieved 2023-06-15.
  6. Welcome!, The Scala Programming Language, 2023-06-14, retrieved 2023-06-15
  7. Dotty, Programming Methods Laboratory EPFL, 2023-06-14, retrieved 2023-06-15
  8. "sbt Reference Manual — Developer's Guide (Work in progress)". www.scala-sbt.org. Retrieved 2023-06-15.
  9. "Releases · sbt/sbt". GitHub (in English). Retrieved 2023-06-15.
  10. Inc, Lightbend. "Typesafe Activator 1.3.0 released: Contains new sbt server and UI | @lightbend". Lightbend (in English). Retrieved 2023-06-15. {{cite web}}: |last= has generic name (help)
  11. "जिंक 1.0 के साथ संकलन समय को तेज करें". www.scala-lang.org. Retrieved 2023-06-15.
  12. "स्काला.जे.एस". Scala.js. Retrieved 2023-06-15.
  13. "Scala Native — Scala Native 0.4.14 documentation". scala-native.org. Retrieved 2023-06-15.
  14. "Coursier · Pure Scala Artifact Fetching". get-coursier.io. Retrieved 2023-06-15.
  15. "सर्वर प्रोटोकॉल बनाएँ". build-server-protocol.github.io (in English). Retrieved 2023-06-15.
  16. sbt: .sbt build definition
  17. "प्लग-इन". sbt. Retrieved 17 October 2014.
  18. "Introduction to Mill :: Mill". mill-build.com. Retrieved 2023-06-15.