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?

Rajmahendra
la source

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
Peter Niederwieser
la source
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
74

Vous recherchez peut-être:

gradle publishToMavenLocal

Disponible avec:

apply plugin: 'maven-publish'

Voir: https://docs.gradle.org/current/userguide/publishing_maven.html

Miguel Reyes
la source
3
Cela fonctionne bien même avec les options maven:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
clairsemé
3
comment est - ce différent gradle installavec le mavenplug - in?
Matt
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'
}
csaba.sulyok
la source
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 .

Sasha Shpota
la source