ग्रेडल - एक निर्भरता का नवीनतम रिलीज़ संस्करण प्राप्त करना


93

Gradleनिम्नलिखित को बताने का सबसे आसान तरीका क्या होगा :

'जूनिट' निर्भरता को पुनः प्राप्त करें और इसका नवीनतम 'रिलीज़' संस्करण लें।

मेवेन और आइवी रिपॉजिटरी का प्रबंधन मेरे लिए नया है। मैंने निम्नलिखित चरणों की कोशिश की और वे परिणाम में Could not resolve dependency ...त्रुटि:

  • compile "junit:junit:latest.release"केवल रिपॉजिटरी के साथ लिखें mavenCentral() (हालांकि, यह काम करता है अगर मैं कहता हूं "जूनिट: जूनिट: 4.10")।

  • compile "junit:junit:latest.release"निम्नलिखित तरीके से रिपॉजिटरी के साथ लिखें :

    ivy {
        // I also tried 'http://maven.org' and other possible variants.           
        url "http://repo1.maven.org" 
        layout "maven"
    }
    
  • वसंत स्रोत आइवी रिपॉजिटरी का उपयोग करने का प्रयास किया गया:

    ivy {
        artifactPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivyPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
    }
    

शायद मैं कुछ गलत समझ रहा हूं। आश्रित का नवीनतम संस्करण प्राप्त करना इतना कठिन काम क्यों होगा ?


गतिशील संस्करण, नवीनतम उपलब्ध संस्करण के लिए एक प्लेसहोल्डर हो सकता है latest.integrationडायनामिक संस्करणों के लिए ढाल प्रलेखन
भाविक

जवाबों:


48

ग्रैडल वर्तमान में मावेन का समर्थन नहीं करता है RELEASE(जिसका उपयोग शायद ही कभी किया जाता है और पदावनत किया जाता है) लेकिन यह आइवी का समर्थन करता है latest.release। हालांकि, सामान्य सिफारिश सटीक संस्करणों के खिलाफ बनाने की है। अन्यथा, निर्माण एक लॉटरी बन सकता है।


Maven RELEASE का भी समर्थन नहीं करता है। केवल निश्चित संस्करण संख्याएँ।
खमरबाइज़

10
मैंने डबल चेक किया है। मावेन समर्थन करता है RELEASE, दोनों संस्करण 2 और 3 में
पीटर निडरविसर

तुम सही हो। मुझे लगता है कि प्लगइन संस्करणों के साथ गलत है, Maven 3 के लिए कारण यह अब / / नवीनतम अनुमति नहीं देता है। लेकिन इस तरह के संस्करण पहचानकर्ताओं का उपयोग करना निश्चित रूप से बुरा व्यवहार है।
khmarbaise

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

2
ग्रेड 'latest.release' (लेकिन 'RELEASE') का समर्थन नहीं करता है। यह सुनिश्चित करने के लिए यह बेहद उपयोगी है कि आपके स्वयं के आंतरिक पुस्तकालय सबसे हाल के, सिद्ध संस्करण पर हैं - मैं निश्चित रूप से कभी भी बाहरी / 3-पक्षीय पुस्तकालयों के लिए इसके उपयोग की वकालत नहीं करता, उसी कारण के लिए जो पीटर ऊपर बताता है।
RCross

257

यह कभी-कभी नवीनतम रिलीज़ प्राप्त करने के लिए काफी उपयोगी हो सकता है - यदि उदाहरण के लिए आप अक्सर अपनी खुद की निर्भरता को जारी करते हैं।

आप जैसे नवीनतम संस्करण प्राप्त कर सकते हैं

compile "junit:junit:+"

या कम से कम प्रमुख संस्करण जैसे बेहतर निर्दिष्ट करें

compile "junit:junit:4.+"

27
सिर्फ रिकॉर्ड के लिए: यह वास्तव में दोहरे उद्धरण होना चाहिए! मैं अपनी अधिकांश निर्भरता घोषणाओं के लिए एकल-उद्धरणों का उपयोग कर रहा हूं और पता चला है कि code 'junit:junit:4.+'काम नहीं करता है
azonli

1
@ Amazonli मेरे लिए सिंगल कोट्स के साथ काम करना चाहता है, कम से कम स्थानीय निर्भरता के लिए। आपको क्या त्रुटि मिल रही है?
डेविड मोल्स

3
यह "संकलन" के बजाय "testCompile" नहीं होना चाहिए? क्योंकि एक रिलीज में विरूपण साक्ष्य की आवश्यकता नहीं है
मार्टिन Dürrmeier

6
आपको हमेशा एक प्रतिलिपि प्रस्तुत करने योग्य निर्माण की आवश्यकता नहीं होती है।
Lakatos Gyula

2
@SimonForsberg ... सच है, हालाँकि जब आप अंडर-डेवलप होते हैं तो आप (ए) ब्लीडिंग-एज या (बी) का पालन करना सुनिश्चित कर सकते हैं कि वी के लिए बग फिक्स 4.+आपके प्रोजेक्ट के लिए अद्यतित हैं। जब आप अल्फा, बीटा, -RC या -RELEASE स्टेज पर पहुँचते हैं; मैं पूरी तरह से सहमत हूं कि आपको उन संस्करणों को एक पोल पर ' नेल ' करने की आवश्यकता है । मैं एक properties' file to set version specifiers: संकलन " जूनिट : जूनिट : $ { जूनटायर }" का उपयोग करता हूं ।
होगा

25

ग्रेड-वर्जन-प्लगिन देखें। यह वही करता है जो आप चाहते हैं: https://github.com/ben-manes/gradle-versions-plugin

स्थापना के लिए, जीथब पृष्ठ देखें। मूल रूप से आपको अपने build.gradle - प्रोजेक्ट फ़ाइल में इन दो लाइनों को जोड़ने की आवश्यकता है:

apply plugin: 'com.github.ben-manes.versions'

buildscript {
    [...]
    dependencies {
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.8'
        [...]
    }
}
[...]

तब आप अपने प्रोजेक्ट dir में टर्मिनल में इस कमांड को चलाकर प्लगइन का उपयोग कर सकते हैं:

./gradlew dependencyUpdates -Drevision=release

और यह आपको दिखाएगा कि कौन सी निर्भरता पुरानी है!


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

क्या होगा अगर निर्भरता एक ही रेपो में है, और आप हमेशा नवीनतम संस्करण चाहते हैं?
बैरी केली

8

नवीनतम ग्रेड उपयोगकर्ता गाइड का उल्लेख करता है और बताता है कि संस्करण में साइन इन करें:

से 7.2। अपनी निर्भरता की घोषणा :

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

... बिल्ड स्क्रिप्ट यह भी बताती है कि परियोजना के परीक्षणों को संकलित करने के लिए किसी भी जूनियर> = 4.0 की आवश्यकता है।

से 23.7। कैसे निर्भरता संकल्प काम करता है :

यदि निर्भरता को एक गतिशील संस्करण (जैसे 1. +) के रूप में घोषित किया जाता है, तो ग्रेडल रिपॉजिटरी में नवीनतम उपलब्ध स्थैतिक संस्करण (जैसे 1.2) को हल करेगा। मावेन रिपॉजिटरी के लिए, यह मावेन-मेटाडेटा.एक्सएमएल फ़ाइल का उपयोग करके किया जाता है, जबकि आइवी रिपॉजिटरी के लिए यह निर्देशिका लिस्टिंग द्वारा किया जाता है।


1
महत्वपूर्ण संकेत: + आवश्यक रूप से नवीनतम संस्करण नहीं लेता है। ऊपर मेरी टिप्पणी देखें।
हैरी जी।

3

Android स्टूडियो में:

यदि आप +संस्करण के लिए उपयोग कर रहे हैं , और जानना चाहते हैं कि कौन सा संस्करण वास्तव में उपयोग किया जा रहा है , Projectतो साइडबार में चयन करें , और फिर External Librariesआपको उपयोग में वास्तविक संस्करण संख्या दिखाई देगी।


क्या आप किसी विशिष्ट IDE की बात कर रहे हैं? :-)
इंगो

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