क्या एंड्रॉइड ग्रेडेल में निर्भरता के रूप में गिट रिपॉजिटरी घोषित करना संभव है?


112

मैं mavencentral से अपने lib के मास्टर संस्करण का उपयोग करना चाहता हूं।

क्या एंड्रॉइड ग्रेडेल में निर्भरता के रूप में गिट रिपॉजिटरी घोषित करना संभव है?


3
क्या आपको कोई हल मिला?
साहिर सैय्यद 11

जवाबों:


150

मेरे लिए सबसे अच्छा तरीका है:

https://jitpack.io

चरण 1. रिपोजिटरी के अंत में build.gradle पर JitPack रिपॉजिटरी जोड़ें:

repositories {
    // ...
    maven { url "https://jitpack.io" }
}

चरण 2. प्रपत्र में निर्भरता जोड़ें

dependencies {
    compile 'com.github.User:Repo:Tag'
}

उदाहरण के लिए, मास्टर शाखा पर नवीनतम प्रतिबद्ध बनाना संभव है:

dependencies {
    compile 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}

6
यदि आप नवीनतम मास्टर चाहते हैं तो संस्करण का उपयोग करें -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs

5
यह स्पैम है मुझे लगता है। लेकिन मैं वास्तव में कहना चाहता हूं कि jitpack.io वास्तव में वास्तव में बहुत अच्छा है ..............
एरिक

5
सुनिश्चित करें कि आप इसे मुख्य अनुभाग में डालते हैं, न किbuildscript
सर्गेई लेडवानोव

"TAG" क्या है ??
माकलेले

@ मैकाले, "TAG" एक गिट टैग है (किसी भी टैग की गई प्रतिबद्धता, उदाहरण के लिए, कुछ रिलीज़)। डॉक्स
सूर्योदय

40

या आप एक रिपॉजिटरी को इस तरह से एक सबमॉड्यूल के रूप में पंजीकृत कर सकते हैं

$ git submodule add my_sub_project_git_url my-sub-project

फिर अपनी सेटिंग्स में प्रोजेक्ट को शामिल करें। फ़ाइल को इस तरह दिखना चाहिए

include ':my-app', ':my-sub-project'

अंत में, इस तरह से अपने आवेदन build.gradle फ़ाइल में निर्भरता के रूप में परियोजना को संकलित करें

dependencies {
  compile project(':my-sub-project')
}

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

git clone --recursive my_sub_project_git_url

मुझे उम्मीद है यह मदद करेगा।


मैं इसे सामान्य रूप से टिप्पणियों में नहीं लिखता, लेकिन इस मामले में मुझे बस "पवित्र बकवास, यार!" कहना होगा, धन्यवाद आदमी! " :-)
L.Butz

मैं @ मिस्टरस्मिथ से सहमत हूं, गिट सबमॉडल्स अक्सर आपको और दूसरों को काटने के लिए वापस आते हैं ..
AO_

13

अब ग्रेडेल में एक नई सुविधा है जो आपको गिट से स्रोत निर्भरता जोड़ने की सुविधा देती है।

आपको सबसे पहले रेपो को settings.gradleफाइल में परिभाषित करना होगा और इसे एक मॉड्यूल पहचानकर्ता के पास मैप करना होगा:

sourceControl {
    gitRepository("https://github.com/gradle/native-samples-cpp-library.git") {
        producesModule("org.gradle.cpp-samples:utilities")
    }
}

और अब build.gradleआप में आप एक विशिष्ट टैग (जैसे: 'v1.0') को इंगित कर सकते हैं:

dependencies {
    ...

    implementation 'org.gradle.cpp-samples:utilities:v1.0'
}

या एक विशिष्ट शाखा के लिए:

dependencies {
    ...

    implementation('org.gradle.cpp-samples:utilities') {
        version {
            branch = 'release'
        }
    }
}

चेतावनियां:

  • 4.10 या उससे अधिक ग्रेड की आवश्यकता है
  • अभी तक प्रमाणीकरण का समर्थन नहीं करता है

संदर्भ:


यह बहुत अच्छा होगा यदि यह आईडीई के साथ भी काम कर सकता है: मैंने अपने एंड्रॉइड प्रोजेक्ट में अपने पुस्तकालयों में से एक के लिए sourceControl का उपयोग करने की कोशिश की (एंड्रॉइड स्टूडियो 3.4.1 के साथ), आईडीई "सिंक सिंक" और स्रोत फ़ाइलों को करने में सक्षम नहीं है पुस्तकालय नहीं देख रहा हूँ… ..लेकिन अगर मैं कमांड लाइन के माध्यम से निर्माण करता हूँ ”।/gradlew बिल्ड” सब कुछ काम करता है।
गैब्री

मुझे यकीन नहीं है कि यह सिर्फ मेरे लिए है, लेकिन मुझे इसके साथ बहुत सारे मुद्दों का सामना करना पड़ा, खासकर जब लाइब्रेरी में डेटाबाइंडिंग है। एक के लिए ढाल स्क्रिप्ट एक NPE फेंकता है और डेटा पुनर्विक्रेता संकलक के लिए एसडीके फ़ोल्डर का पता नहीं लगा सकता है जबकि ऑटो जीआईटी रेपो का निर्माण कर रहा है। android.googlesource.com/platform/tools/base/+/… मैंने अपना स्थानीय कमिटमेंट समाप्त कर दिया है। हालांकि मैं अन्य मुद्दों में भी भाग गया
humblerookie

6

मुझे नहीं लगता कि ग्रैडल एक निर्भरता के रूप में गिट रिपॉजिटरी को जोड़ने का समर्थन करता है। मेरा समाधान यह है:

  • घोषित करें कि मुख्य परियोजना फाइलसिस्टम में किसी अन्य परियोजना पर निर्भर करती है
  • निर्भरता के रूप में घोषित फ़ोल्डर में गिट रेपो को स्वचालित रूप से क्लोन करने का एक तरीका प्रदान करता है

मुझे लगता है कि आप मुख्य परियोजना रेपो के फ़ोल्डर के बाहर लाइब्रेरी रेपो चाहते हैं, इसलिए प्रत्येक प्रोजेक्ट स्वतंत्र गिट रेपो होगा, और आप लाइब्रेरी और मुख्य प्रोजेक्ट गिट रिपॉजिटरी से स्वतंत्र रूप से कमिट कर सकते हैं।

मान लें कि आप लाइब्रेरी प्रोजेक्ट का फ़ोल्डर उसी फ़ोल्डर में रखना चाहते हैं जिसमें मुख्य प्रोजेक्ट का फ़ोल्डर है,

आप ऐसा कर सकते हैं:

शीर्ष-स्तरीय सेटिंग में। फ़ाइल सिस्टम में स्थान को देखते हुए, लाइब्रेरी रिपॉजिटरी को प्रोजेक्ट के रूप में घोषित करें

// Reference:  https://looksok.wordpress.com/2014/07/12/compile-gradle-project-with-another-project-as-a-dependency/

include ':lib_project'
project( ':lib_project' ).projectDir = new File(settingsDir, '../library' )

लाइब्रेरी को git रिपॉजिटरी से क्लोन करने के लिए gradle-git प्लगइन का उपयोग करें

    import org.ajoberstar.gradle.git.tasks.*

    buildscript {
       repositories { mavenCentral() }
       dependencies { classpath 'org.ajoberstar:gradle-git:0.2.3' }
    }

    task cloneLibraryGitRepo(type: GitClone) {
            def destination = file("../library")
            uri = "https://github.com/blabla/library.git"
            destinationPath = destination
            bare = false
            enabled = !destination.exists() //to clone only once
        }

अपनी परियोजना की निर्भरता में, कहते हैं कि आपकी परियोजना का कोड गिट परियोजना के फ़ोल्डर पर निर्भर करता है

dependencies {
    compile project(':lib_project')
}

ग्रैडल अब कुछ प्रतिबंधों के साथ स्रोत निर्भरता का समर्थन करता है। मेरा जवाब यहाँ
मिस्टर स्मिथ

5

निकटतम चीज़ जो मुझे मिली है वह है https://github.com/bat-cha/gradle-plugin-git-d dependencies लेकिन मैं इसे एंड्रॉइड प्लगइन के साथ काम करने के लिए नहीं प्राप्त कर सकता हूं, गिट के बाद भी मैवेन से खींचने की कोशिश करता रहता है रेपो लोड किए गए हैं।

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