ग्रैडल में सकर्मक = सत्य क्या है (wrt crashlytics)?


174

ग्रैडल transitive = trueवास्तव में क्या करता है? यह ग्रैडल प्रलेखन से स्पष्ट नहीं है । यह compileभीतर के संदर्भ में है build.gradle। मेरे मामले में मैं एंड्रॉइड के दुर्घटनाग्रस्त होने पर निर्भर हूं।

compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') {
    transitive = true;
}

कई ग्रेडल डॉक्स ( यहां और यहां ) का अर्थ है कि "सकर्मक" सत्य के लिए चूक है। फिर भी सकारात्‍मक transitive = trueनिर्भरता में परिणाम निकालना (विशेष रूप से KitGroup) नहीं लाया जा रहा है ।

class file for io.fabric.sdk.android.KitGroup not found

डॉक्स का कहना है कि यह सच है, फिर भी वास्तविक व्यवहार इसके विपरीत लगता है।

मैं ग्रैडल 2.2.1 चला रहा हूं। शायद व्यवहार 2.2 और 2.4 के बीच बदल गया है?

संपादित करें : संबंधित ट्रान्सिटिव निर्भरताएँ अरैल लाइब्रेरी के लिए हल नहीं हुई हैं


विन्यास को परिभाषित करते समय, या निर्भरता को परिभाषित करते समय?
dultult

जार फाइलों की निर्भरता को उप परियोजनाओं में बढ़ावा दिया जाता है। प्रत्येक परियोजना को स्पष्ट रूप से निर्भरता को परिभाषित करने की आवश्यकता नहीं है।
कोनराड

इस दस्तावेज में क्या स्पष्ट नहीं है ?
ओलेग एस्टेखिन

3
@OlegEstekhin प्रलेखन रनटाइम बिहेवियर से मेल नहीं खाता, मैं देख रहा हूं
स्टीव कू

जवाबों:


153

आप @aarसंकेतन का उपयोग कर रहे हैं ।
इसका मतलब है कि आप केवल आरा कलाकृति, और कोई निर्भरता नहीं डाउनलोड करना चाहते हैं।
आप दस्तावेज़ के इस भाग की जाँच कर सकते हैं : अनुभाग की
जाँच करें 1.4.1.2. Artifact only notation:

एक विरूपण साक्ष्य केवल संकेतन एक मॉड्यूल निर्भरता बनाता है जो केवल कलाकृत फ़ाइल को निर्दिष्ट एक्सटेंशन के साथ डाउनलोड करता है। मौजूदा मॉड्यूल विवरणकों को अनदेखा किया जाता है

@aarयदि आप निर्भरताएं डाउनलोड करना चाहते हैं, तो नोटेशन का उपयोग करके आपको जोड़ना चाहिए transitive=true

मुझे उम्मीद है कि @AR को छोड़ कर यह सकर्मक विशेषता को जोड़े बिना काम करना चाहिए।


7
मैंने पुष्टि की कि @AR को छोड़ना और सकर्मक विशेषता को हटाना काम करता है। यहाँ आशय यह है कि डेवलपर्स फैब्रिक किट को स्पष्ट रूप से संदर्भित करते हैं (उदाहरण के लिए, "compile 'com.crashlytics.sdk.android:crashlytics:2.5.5'"), और यह कि कोर io.fabric-sdk.android क्लासेस को अंदर खींचा जाए। सकर्मक निर्भरता। यदि आप संक्रमणीय = गलत सेट करते हैं, तो io.fabric.sdk.android.Fabric वर्ग अनिवार्य समय पर नहीं मिलेगा।
मार्क मैक्लेलैंड

7
यह "सुविधा" बहुत बुरा है, मैं इसकी निर्भरता के साथ एक आरा चाहता हूं। @AR के बिना यह जार की खोज करता है और शिकायत करता है
dowi

12

अधिक सामान्य नोट पर: लाइब्रेरी transitive = falseपर सेट crashlyticsकरने से crashlytics(= "क्षणिक लाइब्रेरी") के लिए आवश्यक सभी पुस्तकालयों को अनदेखा करने का कारण बनता है और उन्हें डाउनलोड और लिंक नहीं किया जा सकता है।

आपको या तो मैन्युअल रूप से आवश्यक पुस्तकालयों को अपनी परियोजना में जोड़ना होगा या अन्य निर्भरताओं द्वारा जोड़े गए अन्य क्षणिक पुस्तकालयों पर भरोसा करना होगा।

डिफ़ॉल्ट के लिए है transitive = true

यहाँ उदाहरण और पूर्ण विवरण: http://www.devsbedevin.net/android-understanding-gradle-d dependencies-and-resolve-conflicts /


लिंक काम नहीं करता है। मुझे डर है कि यह डिफ़ॉल्ट रूप से सच नहीं है, क्योंकि कुछ मामलों में विशेष रूप से सच लिखते हैं
मोरोज़ोव

@Morozov लिंक ठीक किया गया। GOTCHA के लिए धन्यवाद!
Vaiden

5

मेरा अनुमान है कि Crashlytics विरूपण साक्ष्य जो करने के लिए आप बात कर रहे हैं मैन्युअल रूप से निर्भरता को निर्दिष्ट के रूप में है नहीं सकर्मक ( transitive=false) ताकि आप डिफ़ॉल्ट रूप से में उन निर्भरता लाने के लिए मजबूर नहीं कर रहे हैं। इसलिए आप विपरीत व्यवहार देख रहे हैं। उदाहरण के लिए, कुछ डेवलपर Google Play Services या जो भी वर्तमान में हो, क्रैशलाईटिक्स का उपयोग करना चाहते हैं।

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

यह कहा जा रहा है - मुझे लगता है कि हाथ में बड़ा मुद्दा यह है कि आप सीधे क्रैश आर्टिक्स का संदर्भ नहीं दे रहे हैं - आपको फैब्रिक का उपयोग करना चाहिए, और इसके परिणामस्वरूप क्रैशटिक्स में खींचना चाहिए: https://dev.twitter.com/fabric/ एंड्रॉयड / एकीकृत


फैब्रिक में माइग्रेट करने के निर्देश सीधे Crashlytics विरूपण साक्ष्य को निर्दिष्ट करते हैं, यह मानते हुए कि आप उस फैब्रिक "किट" का उपयोग कर रहे हैं: fabric.io/migrations/gradle
मार्क

ऐसा लग रहा है कि आप सीधे किट का संदर्भ देते हैं, और वे ट्रांसेटिव निर्भरता के माध्यम से io.fabric.sdk.android कक्षाओं में खींचते हैं।
मार्क मैक्लेलैंड

1

सेट करता है कि क्या इस निर्भरता को अपनी सकर्मक निर्भरताओं को शामिल या बाहर करना चाहिए। इस निर्भरता से संबंधित कलाकृतियों में अन्य कलाकृतियों पर निर्भरता हो सकती है। उत्तरार्द्ध को सकर्मक निर्भरता कहा जाता है।


1

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

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


2
अत्यधिक उत्क्रमित उत्तर में सलाह के अतिरिक्त इसने क्या मूल्य जोड़ा?
३:०६ बजे ३

-19

transitiveसंवेदनशीलता को नियंत्रित करता है। ग्रेडेल सामान्य रूप से सकर्मक में चूक करता है, सिवाय इसके कि जब यह नहीं करता है। ट्रांज़िटिविटी और क्लासिफ़ायर के साथ एक बग है, https://issues.gradle.org/browse/GRADLE-3188 देखें


39
मुझे लगता है कि यह उचित है कि आपने बग को इंगित किया। लेकिन, संपत्ति का आपका वर्णन सहायक नहीं है। "सकर्मक संक्रामकता को नियंत्रित करता है। धीरे-धीरे सकर्मक में सक्रमण को छोड़ देता है, जब वह नहीं होता है।" सच में, यार ... सच में?
w3bshark

4
@ w3bshark मुझे लगा कि यह मज़ेदार था। "जब यह नहीं होता है, तो सिवाय इसके कि यह मेरे अनुभव में बहुत सटीक है"
नवीन

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