Apakah mungkin untuk mendeklarasikan repositori git sebagai dependensi di android gradle?

112

Saya ingin menggunakan versi master lib saya dari mavencentral.

Apakah mungkin untuk mendeklarasikan repositori git sebagai dependensi di android gradle?

Alexey Zakharov
sumber
3
apakah Anda menemukan solusi?
Sahir Saiyed

Jawaban:

150

Bagi saya cara terbaik adalah:

https://jitpack.io

Langkah 1. Tambahkan repositori JitPack ke build.gradle di akhir repositori:

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

Langkah 2. Tambahkan ketergantungan di formulir

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

Dimungkinkan untuk membangun komit terbaru di cabang master, misalnya:

dependencies {
    compile 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}
hari yang cerah
sumber
6
Jika Anda menginginkan master terbaru, gunakan versi -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs
5
ini spam kurasa. tetapi saya benar-benar ingin mengatakan bahwa jitpack.io benar-benar sangat keren ..............
Eric
5
Pastikan Anda meletakkan ini di bagian utama, bukan kebuildscript
Sergei Ledvanov
Apa itu "TAG" ??
Makalele
@ Makalele, "TAG" adalah tag git (komit apa pun yang diberi tag, misalnya, beberapa rilis). docs
cerah
40

Atau Anda dapat mendaftarkan repositori sebagai submodul seperti ini

$ git submodule add my_sub_project_git_url my-sub-project

Kemudian sertakan proyek dalam file settings.gradle Anda yang akan terlihat seperti ini

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

Terakhir, kompilasi proyek sebagai dependensi dalam file build.gradle aplikasi Anda seperti ini

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

Kemudian, saat mengkloning proyek Anda, Anda hanya perlu menambahkan opsi --recursiveuntuk membuat git secara otomatis mengkloning repositori root, dan semua submodulnya.

git clone --recursive my_sub_project_git_url

Saya harap ini membantu.

trupin
sumber
Saya biasanya tidak menulis ini di komentar, tetapi dalam kasus ini saya hanya perlu mengatakan "Sialan, bung! Itu sangat keren, terima kasih man!" :-)
L.Butz
Saya setuju dengan @MisterSmith, submodul Git sering kembali menggigit Anda dan orang lain ..
AO_
13

Sekarang ada fitur baru di gradle yang memungkinkan Anda menambahkan dependensi sumber dari git.

Anda harus terlebih dahulu menentukan repo dalam settings.gradlefile dan memetakannya ke pengenal modul:

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

Dan sekarang build.gradleAnda dapat menunjuk ke tag tertentu (misalnya: 'v1.0'):

dependencies {
    ...

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

Atau ke cabang tertentu:

dependencies {
    ...

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

Peringatan:

  • Gradle 4.10 atau lebih tinggi diperlukan
  • Belum mendukung otentikasi

Referensi:

Tuan Smith
sumber
Akan sangat bagus jika ini bisa bekerja juga dengan IDE: Saya mencoba menggunakan sourceControl untuk salah satu perpustakaan saya di proyek android saya (dengan Android Studio 3.4.1), IDE tidak dapat melakukan "sinkronisasi gradle" dan file sumber melakukannya tidak melihat perpustakaan ... ..tapi jika saya membangun melalui baris perintah menggunakan "./gradlew build" semuanya bekerja.
gabry
Saya tidak yakin apakah itu hanya saya tetapi saya menghadapi banyak masalah dengan ini, terutama ketika perpustakaan memiliki penyatuan data. Skrip gradle melontarkan NPE dan tidak dapat menemukan folder sdk untuk kompiler penyatuan data saat membuat repo git secara otomatis. android.googlesource.com/platform/tools/base/+/… Saya akhirnya harus menggunakan properti lokal saya namun saya juga mengalami masalah lain
humblerookie
6

Menurut saya Gradle tidak mendukung untuk menambahkan repositori git sebagai dependensi. Solusi saya adalah:

  • menyatakan bahwa proyek utama bergantung pada proyek lain di sistem berkas
  • menyediakan cara untuk secara otomatis mengkloning repo git di folder yang dideklarasikan sebagai dependensi

Saya berasumsi bahwa Anda menginginkan repo perpustakaan di luar folder repo proyek utama, jadi setiap proyek akan menjadi repo git independen, dan Anda dapat membuat komitmen ke perpustakaan dan repositori git proyek utama secara mandiri.

Dengan asumsi Anda ingin memiliki folder proyek perpustakaan di folder yang sama dengan folder proyek utama,

Anda bisa:

Di tingkat atas settings.gradle, deklarasikan repositori perpustakaan sebagai proyek, mengingat lokasinya di sistem file

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

Gunakan plugin gradle-git untuk menggandakan perpustakaan dari repositori 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
        }

Dalam dependensi proyek Anda, katakanlah bahwa kode proyek Anda bergantung pada folder proyek git

dependencies {
    compile project(':lib_project')
}
GaRRaPeTa
sumber
Gradle sekarang mendukung dependensi sumber dengan batasan tertentu. Lihat jawaban saya di sini
Mister Smith