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?


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

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


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'
}

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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.