Gradle alternativ zu mvn install

162

Ich habe 2 verschiedene Projekte auf MVN gebaut. Ich versuche, Gradle zu ersetzen.

Projekt 1 ist SDK und Projekt 2 verwendet das SDK (Beispiel)

In der Zeit von maven wird mithilfe von mvn install ein Artefakt erstellt, das das gesamte Projekt in das lokale Repository einfügt.

Ich arbeite gerne so in Gradle. Ich mag Projekt 1 build.gradle muss es als lokales Gradle-Repository veröffentlichen und dann muss das Beispielprojekt es verwenden.

In maven führen wir eine mvn-Installation durch, bei der ein Projektartefakt in den Ordner .m2 eingefügt wird, aber wie in gradle vorgegangen wird, damit ich dem lokalen Repository ein Projektartefakt hinzufügen kann.

Wie kann ich das tun?

Rajmahendra
quelle

Antworten:

169

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
quelle
1
Plugin anwenden: "maven" und $ sdk> gradle install dies installiert das sdk in .m2 richtig? Und mavenLocal () bekommt auch Informationen von .m2 und .gradle?
Rajmahendra
14
gradle installveröffentlicht im lokalen Maven-Repo und mavenLocal()stellt sicher, dass dort nach Abhängigkeiten gesucht wird .
Peter Niederwieser
1
Ist Gradle nicht wie Maven "phasenorientiert"? IOW, wenn ich einen gradle publishWillen mache , durchläuft es nicht auch eine installPhase?
Chris F
74

Sie suchen vielleicht:

gradle publishToMavenLocal

Verfügbar mit:

apply plugin: 'maven-publish'

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

Miguel Reyes
quelle
3
Es funktioniert auch mit Maven-Optionen einwandfrei:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
spärlich
3
Wie unterscheidet sich von gradle installdem mavenPlug -in ?
Matt
8

Lesen Sie die Dokumentation von Gradle zu Builds mit mehreren Projekten .

Hier ist ein Beispiel mit einigen zusätzlichen Abhängigkeiten. Ruf einfach angradle install den Stammordner auf, und alles wird erstellt und in Ihr lokales Repo gestellt.

Ordnerstruktur:

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
quelle
4
Ist das eine ideale Praxis? Was ist, wenn er ein neues Projekt erstellen möchte, Beispiel 2, das ebenfalls auf SDK basiert? Jetzt muss er 2 nicht verwandte Projekte unter ein Root-Projekt stellen, nur weil sie eine Abhängigkeit teilen? Sie würden denken, dass dieses gesamte 'Multi-Projekt'-Setup auch 1 Git-Projekt wäre. Ist dies wiederum schlecht für Workflows von Unternehmen / Entwicklern?
Anthony Chuinard
2

Sie müssen Ihre eigene Bibliothek in Ihrem lokalen Repository veröffentlichen. Sie können dies folgendermaßen tun:

  1. In maven-publishplugin:

    plugins {
        // your other plugins come here...
        id 'maven-publish'
    }
  2. Fügen Sie den Veröffentlichungsabschnitt zu Ihrer Build-Datei hinzu:

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

    Weitere Details finden Sie in der Dokumentation .

Sasha Shpota
quelle