Gradle alternative à l'installation mvn


163

J'ai 2 projets différents construits sur mvn. J'essaye de remplacer Gradle.

le projet 1 est SDK et le projet 2 utilise le sdk (exemple)

À l'époque de maven, il crée un artefact en utilisant mvn install qui ajoute l'ensemble du projet dans le référentiel local.

J'aime travailler en gradle comme ça. J'aime le projet 1 build.gradle doit le publier en tant que référentiel local gradle, puis le projet d'exemple doit l'utiliser.

Dans maven, nous faisons mvn install qui ajoute un artefact de projet dans le dossier .m2 mais comment faire en gradle pour que je puisse ajouter un artefact de projet dans le référentiel local.

Comment puis-je le faire?


Réponses:


170

sdk/build.gradle:

apply plugin: "maven"

group = "foo"
version = "1.0"

example/build.gradle:

repositories {
    mavenLocal()
}

dependencies {
    compile "foo:sdk:1.0"
}

$sdk> gradle install

$example> gradle build

1
appliquer le plugin: "maven" et $ sdk> gradle install cela installera le sdk dans .m2 non? Et mavenLocal () obtient également des informations de .m2 et .gradle?
Rajmahendra

14
gradle installpublie dans le référentiel Maven local et mavenLocal()veille à y rechercher les dépendances.
Peter Niederwieser

1
Gradle n'est-il pas "orienté phase" comme Maven? IOW, si je fais un, ne gradle publishpassera-t-il pas également par une installphase?
Chris F


8

Consultez la documentation de Gradle sur les versions multi-projets .

Voici un exemple, avec quelques dépendances supplémentaires. Appelez simplement gradle installle dossier racine, et tout sera construit et placé dans votre dépôt local.

Structure des dossiers:

root
+--> build.gradle
+--> settings.gradle
+--> sdk
|    +--> build.gradle
+--> example
     +--> build.gradle

root / build.gradle:

allprojects {
  apply plugin: 'java'
  apply plugin: 'maven'

  group = 'myGroup'
  version = '0.1-SNAPSHOT'
}

root / settings.gradle:

include 'sdk'
include 'example'

root / sdk / build.gradle:

dependencies {
  // just an example external dep.
  compile group:'commons-lang', name:'commons-lang', version:'2.3'
}

root / exemple / build.gradle:

dependencies {
  compile project(':sdk')
  compile group:'log4j', name:'log4j', version:'1.2.16'
}

4
Est-ce une pratique idéale? Et s'il veut créer un nouveau projet, example2, qui s'appuie également sur sdk? Maintenant, il doit mettre 2 projets non liés sous un projet racine simplement parce qu'ils partagent une dépendance? On pourrait penser que toute cette configuration `` multi-projet '' serait également un projet Git. Encore une fois, est-ce mauvais pour les workflows d'entreprise / multi-développeurs?
Anthony Chuinard

2

Vous devez publier votre propre bibliothèque dans votre référentiel local. Vous pouvez le faire de la manière suivante:

  1. Ajouter un maven-publishplugin:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
  2. Ajoutez la section de publication à votre fichier de construction:

    publishing {
        publications {
            myCoolLibrary(MavenPublication) {
                from components.java
            }
        }
    }
  3. Courir gradle build publishToMavenLocal

    Trouvez plus de détails dans la documentation .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.