Gradle si alterna all'installazione di mvn


163

Ho 2 diversi progetti basati su mvn. Sto cercando di sostituire Gradle.

il progetto 1 è SDK e il progetto 2 utilizza sdk (esempio)

Al momento della creazione crea artefatto usando mvn install che aggiunge l'intero progetto al repository locale.

Mi piace lavorare in questo modo. Mi piace il progetto 1 build.gradle è necessario pubblicarlo come un repository locale gradle e quindi un progetto di esempio deve usarlo.

In maven eseguiamo mvn install che aggiunge un artefatto del progetto nella cartella .m2 ma come fare in gradle, quindi cosa posso aggiungere un artefatto del progetto nel repository locale.

In che modo posso farlo?


Risposte:


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
applica plugin: "maven" e $ sdk> gradle install installeranno sdk in .m2 giusto? E mavenLocal () ottiene anche informazioni da .m2 e .gradle?
Rajmahendra,

14
gradle installpubblica nel repository Maven locale e si mavenLocal()assicura di cercare le dipendenze.
Peter Niederwieser,

1
Gradle non è "orientato alla fase" come Maven? IOW, se faccio un gradle publishtestamento non passa anche attraverso una installfase?
Chris F


8

Consulta la documentazione di Gradle su build multi-progetto .

Ecco un esempio, con alcune dipendenze extra. Basta chiamare gradle installnella cartella principale e tutto sarà creato e messo nel tuo repository locale.

Struttura delle cartelle:

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

radice / build.gradle:

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

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

radice / settings.gradle:

include 'sdk'
include 'example'

radice / sdk / build.gradle:

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

radice / example / build.gradle:

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

4
Questa è la pratica ideale? E se volesse creare un nuovo progetto, esempio2, che si basa anche su SDK? Ora deve mettere 2 progetti non correlati in un progetto radice solo perché condividono una dipendenza? Penseresti che questa intera configurazione 'multi-progetto' sarebbe anche un progetto Git. Ancora una volta, è un male per i flussi di lavoro aziendali / multi-sviluppatore?
Anthony Chuinard,

2

Devi pubblicare la tua libreria nel tuo repository locale. Puoi farlo nel modo seguente:

  1. Aggiungi maven-publishplug-in:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
  2. Aggiungi la sezione di pubblicazione al tuo file di build:

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

    Trova maggiori dettagli nella documentazione .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.