Est-il possible de déclarer le dépôt git en tant que dépendance dans android gradle?

112

Je souhaite utiliser la version principale de ma bibliothèque de mavencentral.

Est-il possible de déclarer le dépôt git en tant que dépendance dans android gradle?

Alexey Zakharov
la source
3
avez-vous trouvé une solution?
Sahir Saiyed

Réponses:

150

Pour moi, le meilleur moyen est:

https://jitpack.io

Étape 1. Ajoutez le référentiel JitPack à build.gradle à la fin des référentiels:

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

Étape 2. Ajoutez la dépendance dans le formulaire

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

Il est possible de construire le dernier commit sur la branche master, par exemple:

dependencies {
    compile 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}
journée ensoleillée
la source
6
Si vous voulez le dernier master, utilisez la version -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs
5
c'est du spam je suppose. mais je veux vraiment dire que jitpack.io est vraiment vraiment vraiment cool ..............
Eric
5
Assurez-vous de mettre cela dans la section principale, pas dans lebuildscript
Sergei Ledvanov
Qu'est-ce que "TAG" ??
Makalele
@Makalele, "TAG" est une balise git (tout commit balisé, par exemple, une version). docs
sunnyday
40

Ou vous pouvez enregistrer un référentiel en tant que sous-module comme celui-ci

$ git submodule add my_sub_project_git_url my-sub-project

Incluez ensuite le projet dans votre fichier settings.gradle qui devrait ressembler à ceci

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

Enfin, compilez le projet en tant que dépendance dans le fichier build.gradle de votre application comme ceci

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

Ensuite, lors du clonage de votre projet, il vous suffira d'ajouter l'option --recursivepermettant à git de cloner automatiquement le référentiel racine, et tous ses sous-modules.

git clone --recursive my_sub_project_git_url

J'espère que cela aide.

trupin
la source
Normalement, je n'écris pas ça dans les commentaires, mais dans ce cas, je dois juste dire "Putain de merde, mec! C'est trop cool, merci mec!" :-)
L.Butz
Je suis d'accord avec @MisterSmith, les sous-modules Git reviennent souvent pour vous mordre vous et les autres ..
AO_
13

Il y a maintenant une nouvelle fonctionnalité dans gradle qui vous permet d'ajouter des dépendances source à partir de git.

Vous devez d'abord définir le référentiel dans le settings.gradlefichier et le mapper à un identifiant de module:

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

Et maintenant, dans votre, build.gradlevous pouvez pointer vers une balise spécifique (par exemple: 'v1.0'):

dependencies {
    ...

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

Ou vers une succursale spécifique:

dependencies {
    ...

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

Mises en garde:

  • Gradle 4.10 ou supérieur requis
  • Ne prend pas encore en charge l'authentification

Références:

Monsieur Smith
la source
Ce serait génial si cela pouvait fonctionner aussi avec l'EDI: j'ai essayé d'utiliser sourceControl pour l'une de mes bibliothèques dans mon projet Android (avec Android Studio 3.4.1), l'EDI n'est pas capable de faire la "gradle sync" et les fichiers source le font pas voir la bibliothèque ... ..mais si je construis via la ligne de commande en utilisant "./gradlew build" tout fonctionne.
gabry
Je ne sais pas si c'est juste moi, mais j'ai rencontré beaucoup de problèmes avec cela, en particulier lorsque la bibliothèque a une liaison de données. D'une part, le script gradle lève un NPE et ne peut pas localiser le dossier sdk pour le compilateur de liaison de données lors de la construction automatique du référentiel git. android.googlesource.com/platform/tools/base /+/... J'ai fini par devoir valider mon local.properties mais j'ai également rencontré d'autres problèmes
humblerookie
6

Je ne pense pas que Gradle prend en charge l'ajout d'un dépôt git en tant que dépendance. Ma solution consiste à:

  • déclarer que le projet principal dépend d'un autre projet dans le système de fichiers
  • fournir un moyen de cloner automatiquement le dépôt git dans le dossier déclaré en tant que dépendance

Je suppose que vous voulez que le dépôt de la bibliothèque soit en dehors du dossier du dépôt du projet principal, donc chaque projet sera un dépôt git indépendant, et vous pouvez effectuer des validations dans les dépôts de la bibliothèque et du projet principal git indépendamment.

En supposant que vous souhaitiez avoir le dossier du projet de bibliothèque dans le même dossier que le dossier du projet principal,

Vous pourriez:

Dans le fichier settings.gradle de niveau supérieur, déclarez le référentiel de bibliothèque en tant que projet, étant donné son emplacement dans le système de fichiers

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

Utilisez le plugin gradle-git pour cloner la bibliothèque à partir du dépôt 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
        }

Dans les dépendances de votre projet, disons que le code de votre projet dépend du dossier du projet git

dependencies {
    compile project(':lib_project')
}
GaRRaPeTa
la source
Gradle prend désormais en charge les dépendances sources avec certaines restrictions. Voir ma réponse ici
Mister Smith