Android gradle'da git deposunu bağımlılık olarak bildirmek mümkün müdür?


Yanıtlar:


150

Benim için en iyi yol:

https://jitpack.io

Adım 1. Depoların sonunda build.gradle'a JitPack deposunu ekleyin:

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

Adım 2. Bağımlılığı forma ekleyin

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

Ana dalda en son yürütmeyi oluşturmak mümkündür, örneğin:

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

6
En son ana bilgisayarı istiyorsanız -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs

5
bu spam sanırım. ama gerçekten jitpack.io'nun gerçekten harika olduğunu söylemek istiyorum ..............
Eric

5
Bunu ana bölüme koyduğunuzdan emin olun,buildscript
Sergei Ledvanov

"ETİKET" nedir ??
Makalele

@Makalele, "TAG" bir git etiketidir (herhangi bir etiketli kaydetme, örneğin bazı sürümler). docs
güneşli

40

Veya bir depoyu bunun gibi bir alt modül olarak kaydedebilirsiniz

$ git submodule add my_sub_project_git_url my-sub-project

Ardından projeyi, böyle görünmesi gereken settings.gradle dosyanıza ekleyin

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

Son olarak, projeyi uygulama build.gradle dosyanızda aşağıdaki gibi bir bağımlılık olarak derleyin

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

Ardından, projenizi klonlarken, yalnızca --recursivegit'in kök depoyu ve tüm alt modüllerini otomatik olarak klonlaması seçeneğini eklemeniz gerekecektir .

git clone --recursive my_sub_project_git_url

Umut ediyorum bu yardım eder.


Normalde bunu yorumlarda yazmam, ama bu durumda sadece "Kahretsin, dostum! Çok havalı, teşekkürler dostum!" Demek zorundayım. :-)
L.Butz

@MisterSmith'e katılıyorum, Git alt modülleri sık sık sizi ve diğerlerini ısırmak için geri geliyor ..
AO_

13

Artık gradle'da git'ten kaynak bağımlılıkları eklemenize izin veren yeni bir özellik var.

Önce depoyu settings.gradledosyada tanımlamanız ve bir modül tanımlayıcısıyla eşleştirmeniz gerekir:

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

Ve şimdi build.gradlesizde belirli bir etiketi işaret edebilirsiniz (örneğin: 'v1.0'):

dependencies {
    ...

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

Veya belirli bir şubeye:

dependencies {
    ...

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

Uyarılar:

  • Gradle 4.10 veya üstü gerekir
  • Henüz kimlik doğrulamayı desteklemiyor

Referanslar:


Bu, IDE ile de çalışabilirse harika olur: Android projemde (Android Studio 3.4.1 ile) kitaplıklarımdan biri için sourceControl kullanmayı denedim, IDE "gradle senkronizasyonu" yapamıyor ve kaynak dosyalar çalışıyor kütüphaneyi görmüyorum ... ..ama "./gradlew build" kullanarak komut satırından inşa edersem her şey çalışır.
gabry

Sadece ben miyim emin değilim ama bununla ilgili pek çok sorunla karşılaştım, özellikle de kütüphanede veri bağlama olduğunda. Birincisi için, gradle komut dosyası bir NPE atar ve git deposunu otomatik olarak oluştururken veri bağlama derleyicisi için sdk klasörünü bulamaz. android.googlesource.com/platform/tools/base/+/… Local.properties'imi uygulamak zorunda kaldım ancak başka sorunlarla da karşılaştım
humblerookie

6

Gradle'ın bağımlılık olarak bir git deposu eklemeyi desteklediğini sanmıyorum. Çözümüm şudur:

  • ana projenin dosya sistemindeki başka bir projeye bağlı olduğunu beyan edin
  • bağımlılık olarak bildirilen klasördeki git deposunu otomatik olarak klonlamanın bir yolunu sağlayın

Kitaplık deposunu ana proje deposu klasörünün dışında istediğinizi varsayıyorum, böylece her proje bağımsız git depoları olacak ve kitaplık ve ana proje git depolarına bağımsız olarak taahhütler verebilirsiniz.

Kütüphane projesinin klasörünün, ana projenin klasörüyle aynı klasörde olmasını istediğinizi varsayarsak,

Yapabilirdiniz:

Üst düzey settings.gradle içinde, dosya sistemindeki konumu göz önüne alındığında kitaplık havuzunu bir proje olarak bildirin

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

Gradle-git eklentisini kullanınKitaplığı git deposundan klonlamak kullanın

    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
        }

Projenizin bağımlılıklarında, projenizin kodunun git projesinin klasörüne bağlı olduğunu söyleyin.

dependencies {
    compile project(':lib_project')
}

Gradle artık belirli kısıtlamalarla kaynak bağımlılıklarını destekliyor. Cevabımı burada
Bay Smith

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.