2013-08-05 12 views
20

मैंने sbt-jumi नामक एक एसबीटी प्लगइन लिखा है जो Jumi के लिए एसबीटी एकीकरण लागू करता है। अभी एसबीटी-जुमी प्लगइन वर्तमान जुमी रिलीज पर निर्भर करता है।एक एसबीटी प्लगइन की निर्भरता को ओवरराइड कैसे करें?

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.5.376" 

और प्लगइन उसकी project/plugins.sbt फ़ाइल में जोड़ना होगा की एक उपयोगकर्ता:

यहाँ प्लगइन के build.sbt से प्रासंगिक लाइन है

addSbtPlugin("fi.jumi.sbt" % "sbt-jumi" % "0.1.0") 

अब मान लें कि Jumi 0.6 .400 जारी किया गया है और यह पिछड़ा संगत है। sbt-jumi प्लगइन का उपयोगकर्ता प्लगइन का नया संस्करण जारी किए बिना, Jumi 0.6.400 का उपयोग करने के लिए कॉन्फ़िगर कैसे कर सकता है?

Here is how to do it in Maven. लेकिन एसबीटी में इसे कैसे करें?

उत्तर

29

प्लगइन्स की निर्भरताओं को ओवरराइड करना सामान्य निर्भरताओं को ओवरराइड करने जैसा ही होता है, सिवाय इसके कि कॉन्फ़िगरेशन को project/plugins.sbt में दर्ज किया जाना चाहिए। ओवरराइडिंग निर्भरताओं को Library Management में समझाया गया है। यहां एक सारांश दिया गया है:

यदि आप जिस संस्करण का उपयोग करना चाहते हैं, वह निर्भरता से अधिक निर्भरता से अधिक है, तो एसबीटी डिफ़ॉल्ट रूप से बड़े संस्करण का उपयोग करेगा। आप संघर्ष प्रबन्धक परिवर्तित डिफ़ॉल्ट व्यवहार को बदलने के लिए कर सकते हैं - उदाहरण के लिए इस संघर्ष पर एक त्रुटि पैदा करेगा:

conflictManager := ConflictManager.strict 

दूसरे शब्दों में, project/plugins.sbt में यह काम करेगा:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.6.400" 

आप जाँच कर सकते हैं अपने प्लगइन निर्भरता reload plugins और फिर show update का उपयोग कर। अब इसे पुराने संस्करण को "(EVICTED)" के रूप में दिखाना चाहिए।

यदि आप जिस संस्करण का उपयोग करना चाहते हैं वह डिफ़ॉल्ट निर्भरता से कम है, तो आपको अलग-अलग ओवरराइड करने की आवश्यकता होगी।

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.4.350" force() 

एक और तरीका है dependencyOverrides सेटिंग का उपयोग करने के लिए है:

dependencyOverrides += "fi.jumi" % "jumi-launcher" % "0.4.350" 

दो तरीकों के बीच अंतर यह है कि अधिभावी एक सीधा निर्भरता की स्थिति नहीं है एक तरह से निर्भरता के लिए मजबूर किया जा सके। मुझे नहीं लगता कि प्लगइन के लिए अंतर महत्वपूर्ण है, लेकिन प्रकाशित कलाकृतियों के लिए इसमें some differences है।

+0

यहां एक मुद्दा है जो मुझे मिला और साझा करना चाहते हैं: दिन 0: प्लगइन का वर्तमान ऑनलाइन प्रकाशित संस्करण '0.3' | दिन 1: मैं स्थानीय रूप से अपनी इन-डेवलपमेंट प्लगइन को संस्करण '0.4' के साथ प्रकाशित करता हूं और स्थानीय प्लगइन के साथ इस प्लगइन का संदर्भ देता हूं दिन 2: प्लगइन इंटरनेट आधिकारिक रेपो पर संस्करण '0.4' के साथ प्रकाशित किया गया है दिन 3: मेरी प्लगइन अब मैं जो अपेक्षा करता हूं वह नहीं करता क्योंकि एसबीटी दोनों प्लगइन लोड करता है लेकिन इंटरनेट से इसे लेने का फैसला करता है। इस मुद्दे को हल करने के लिए मुझे अपना संस्करण '0.5' में बदलना पड़ा और फिर यह काम किया। – Maxence

संबंधित मुद्दे