Czy można zadeklarować repozytorium git jako zależność w Android Gradle?

112

Chcę użyć wersji głównej mojej biblioteki z mavencentral.

Czy można zadeklarować repozytorium git jako zależność w Android Gradle?

Aleksiej Zacharow
źródło
3
czy znalazłeś jakieś rozwiązanie?
Sahir Saiyed

Odpowiedzi:

150

Dla mnie najlepszy sposób to:

https://jitpack.io

Krok 1. Dodaj repozytorium JitPack do build.gradle na końcu repozytoriów:

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

Krok 2. Dodaj zależność w formularzu

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

Możliwe jest zbudowanie najnowszego commita w gałęzi master, na przykład:

dependencies {
    compile 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}
słoneczny dzień
źródło
6
Jeśli chcesz najnowszego mistrza, użyj wersji -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs
5
to chyba spam. ale naprawdę chcę powiedzieć, że jitpack.io jest naprawdę naprawdę fajny ..............
Eric
5
Upewnij się, że umieścisz to w głównej sekcji, a nie wbuildscript
Siergiej Ledwanow
Co to jest „TAG”?
Makalele
@Makalele, „TAG” to tag git (dowolne oznaczone zatwierdzenie, na przykład niektóre wydanie). docs
słoneczny dzień
40

Lub możesz zarejestrować repozytorium jako podmoduł w ten sposób

$ git submodule add my_sub_project_git_url my-sub-project

Następnie umieść projekt w swoim pliku settings.gradle, który powinien wyglądać tak

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

Na koniec skompiluj projekt jako zależność w pliku build.gradle aplikacji w ten sposób

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

Następnie, podczas klonowania projektu, będziesz musiał tylko dodać opcję, --recursiveaby git automatycznie klonował repozytorium główne i wszystkie jego moduły podrzędne.

git clone --recursive my_sub_project_git_url

Mam nadzieję, że to pomoże.

trupin
źródło
Zwykle nie piszę tego w komentarzach, ale w tym przypadku muszę tylko powiedzieć: „Cholera, koleś! To takie fajne, dzięki stary!” :-)
L.Butz
Zgadzam się z @MisterSmith, moduły podrzędne Git często wracają, aby ugryźć Ciebie i innych ..
AO_
13

W gradle jest teraz nowa funkcja, która pozwala dodawać zależności źródłowe z git.

Najpierw musisz zdefiniować repozytorium w settings.gradlepliku i zmapować je na identyfikator modułu:

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

A teraz build.gradlemożesz wskazać konkretny tag (np. „V1.0”):

dependencies {
    ...

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

Lub do konkretnego oddziału:

dependencies {
    ...

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

Ostrzeżenia:

  • Wymagany Gradle 4.10 lub nowszy
  • Nie obsługuje jeszcze uwierzytelniania

Bibliografia:

Panie Smith
źródło
Byłoby wspaniale, gdyby to zadziałało również z IDE: próbowałem użyć sourceControl dla jednej z moich bibliotek w moim projekcie na Androida (z Android Studio 3.4.1), IDE nie jest w stanie wykonać "synchronizacji gradle", a pliki źródłowe tak nie widzę biblioteki ... ..ale jeśli buduję za pomocą wiersza poleceń przy użyciu polecenia „./gradlew build”, wszystko działa.
gabry
Nie jestem pewien, czy to tylko ja, ale napotkałem z tym wiele problemów, zwłaszcza gdy biblioteka ma wiązania danych. Po pierwsze, skrypt gradle zgłasza NPE i nie może zlokalizować folderu sdk dla kompilatora wiązania danych podczas automatycznego budowania repozytorium git. android.googlesource.com/platform/tools/base/+/… Skończyło się na tym, że musiałem zatwierdzić moje local.properties, ale napotkałem również inne problemy
humblerookie
6

Myślę, że Gradle nie obsługuje dodawania repozytorium git jako zależności. Moje obejście to:

  • zadeklaruj, że główny projekt zależy od innego projektu w systemie plików
  • zapewniają sposób automatycznego klonowania repozytorium git w folderze zadeklarowanym jako zależność

Zakładam, że chcesz, aby repozytorium biblioteki znajdowało się poza folderem głównego repozytorium projektu, więc każdy projekt będzie niezależnym repozytorium git i możesz niezależnie wprowadzać zmiany w bibliotece i repozytoriach git głównego projektu.

Zakładając, że chcesz mieć folder projektu biblioteki w tym samym folderze, co folder projektu głównego,

Mógłbyś:

W ustawieniach najwyższego poziomu.gradle, zadeklaruj repozytorium biblioteki jako projekt, biorąc pod uwagę jego lokalizację w systemie plików

// 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' )

Użyj wtyczki gradle-git, aby sklonować bibliotekę z repozytorium 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
        }

W zależnościach projektu powiedz, że kod projektu zależy od folderu projektu git

dependencies {
    compile project(':lib_project')
}
GaRRaPeTa
źródło
Gradle obsługuje teraz zależności źródłowe z pewnymi ograniczeniami. Zobacz moją odpowiedź tutaj
Mister Smith