Gradle alternatywnie do instalacji mvn

163

Mam 2 różne projekty oparte na mvn. Próbuję zamienić na Gradle.

projekt 1 to zestaw SDK, a projekt 2 korzysta z zestawu SDK (przykład)

W czasie maven tworzy artefakt za pomocą mvn install, który dodaje cały projekt do lokalnego repozytorium.

Lubię tak pracować w gradle. Podoba mi się projekt 1 build.gradle musi opublikować go jako lokalne repozytorium Gradle, a następnie przykładowy projekt musi go użyć.

W maven wykonujemy instalację mvn, która dodaje artefakt projektu do folderu .m2, ale jak to zrobić w gradle, więc co mogę dodać artefakt projektu do lokalnego repozytorium.

W jakikolwiek sposób mogę to zrobić?

Rajmahendra
źródło

Odpowiedzi:

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
źródło
1
zastosuj wtyczkę: "maven" i $ sdk> gradle zainstaluj to zainstaluje sdk w .m2, prawda? A mavenLocal () również pobiera informacje z .m2 i .gradle?
Rajmahendra
14
gradle installpublikuje w lokalnym repozytorium Maven i mavenLocal()upewnia się, że szuka się tam zależności.
Peter Niederwieser
1
Czy Gradle nie jest „zorientowany fazowo” jak Maven? IOW, czy jeśli to zrobię gradle publish, to również nie przejdzie przez installfazę?
Chris F
74

Możesz szukać:

gradle publishToMavenLocal

Dostępny z:

apply plugin: 'maven-publish'

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

Miguel Reyes
źródło
3
Działa dobrze nawet z opcjami maven:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
rzadkie
3
jak to jest różne od gradle installz mavenwtyczki?
Matt
8

Zapoznaj się z dokumentacją Gradle dotyczącą kompilacji z wieloma projektami .

Oto przykład z kilkoma dodatkowymi zależnościami. Po prostu zadzwoń gradle installdo folderu głównego, a wszystko zostanie zbudowane i umieszczone w lokalnym repozytorium.

Struktura folderów:

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 / example / build.gradle:

dependencies {
  compile project(':sdk')
  compile group:'log4j', name:'log4j', version:'1.2.16'
}
csaba.sulyok
źródło
4
Czy to idealna praktyka? A co, jeśli chce stworzyć nowy projekt, przykład2, który również opiera się na sdk? Teraz musi umieścić 2 niepowiązane projekty w projekcie głównym tylko dlatego, że mają wspólną zależność? Można by pomyśleć, że cała ta konfiguracja „wieloprojektowa” byłaby również jednym projektem Git. Ponownie, czy jest to złe dla przepływów pracy w firmie / wielu programistów?
Anthony Chuinard,
2

Musisz opublikować własną bibliotekę w swoim lokalnym repozytorium. Możesz to zrobić w następujący sposób:

  1. Dodaj maven-publishwtyczkę:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
    
  2. Dodaj sekcję publikowania do pliku kompilacji:

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

    Więcej szczegółów znajdziesz w dokumentacji .

Sasha Shpota
źródło