2013-03-18 15 views
27

Bei meiner Arbeit verwenden wir Maven. Ich werde es zum ersten Mal versuchen. Wir verwenden einen gemeinsamen Eltern-Pom für alle Projekte, der für gewöhnlich verwendete Maven-Plugins und wenige Comon-Abhängigkeiten enthält. Gibt es eine ähnliche Option in Großbuchstaben?grable elternteil pom like feature

Meine zweite Frage bezieht sich auf Release-Management. Wir verwenden Maven Release-Plugin, das ziemlich gut für uns funktioniert. Gibt es etwas Ähnliches in Gradle?

+0

Das ist, was ich tue: http://stackoverflow.com/a/21139778/859225 Hoffnung, das hilft. – Zlatko

Antwort

23

Um Inhalte in mehreren Projekten desselben Builds zu teilen, verwenden Sie allprojects { ... }, subprojects { ... } usw. Außerdem sind zusätzliche Eigenschaften (ext.foo = ...), die in einem übergeordneten Projekt deklariert sind, in Teilprojekten sichtbar. Ein gängiges Idiom ist es, im Build-Skript der obersten Ebene etwas wie ext.libs = [junit: "junit:junit:4.11", spring: "org.springframework:spring-core:3.1.0.RELEASE", ...] zu haben. Teilprojekte können dann Abhängigkeiten selektiv durch ihren Kurznamen einschließen. Sie sollten in der Lage sein, weitere Informationen dazu in der Gradle Forums finden.

Logik über zu teilen baut, können Sie entweder eine Skript-Plugin schreiben (foo.gradle), ist es auf einem Web-Server aufgestellt, und es ist in mit apply from: "http://..." baut, oder ein binäres Plugin schreiben (eine Klasse org.gradle.api.Plugin Implementierung), veröffentlichen es als Jar zu einem Repository, und es in Builds mit und einem buildscript {} Abschnitt enthalten. Einzelheiten finden Sie unter Gradle User Guide und die vielen Beispiele in der vollständigen Gradle-Verteilung.

Eine aktuelle Einschränkung von Script-Plugins (aber nicht binär) ist, dass sie nicht zwischengespeichert werden. Daher wird ein Build nur dann erfolgreich ausgeführt, wenn eine Verbindung mit dem Webserver hergestellt werden kann, der das Plug-in bereitstellt.

In Bezug auf Ihre zweite Frage (die eine separate Frage sein sollte), gibt es ein paar Plugins von Drittanbietern, zum Beispiel https://github.com/townsfolk/gradle-release.

+0

:-) Weiß nicht, ob es anders geht. Ich dachte, es wäre so einfach wie etwas "my_parent_gradle_config_coordinates" zu schreiben. Danke für Ihre Hilfe. – Murali

+0

> Um Zeug in mehreren Projekten des gleichen Builds zu teilen ... aber 1) Eltern Poms können (ich würde sagen sollte) auch verwendet werden, um "organisationsweite" Build-Funktionen zu definieren und 2) würde ich sagen, Sie sind besser organisieren Abhängigkeiten Verwendung von Verbundwerkstoffen (Composite-Test, Composite-Feder etc.). –

+0

für zukünftige Referenz, Skripte, die von 'apply from' heruntergeladen wurden [werden jetzt zwischengespeichert] (https://github.com/gradle/gradle/pull/1900) –

0

Ihr Ziel achive Sie das Konzept der ‚Multi Build‘ gelten könnten, erklärte in der Gradel Bedienungsanleitung here

Grundsätzlich können Sie einen Regenschirm-Projekt erstellen, die durch die Schaffung einer gradle.build Datei eine Reihe von gemeinsamen Konfigurationen definieren und eine Gradle.settings Datei. Die Build-Datei enthält die Eigenschaften, Abhängigkeiten und Plugins Commons für alle Projekte, die settings.gradle definiert, welche Teilprojekte diese Konfigurationen erben.

Darüber hinaus, um eine Idee von der Graplus-Plugin-Ökosystem zu haben, könnten Sie überprüfen this Quelle.

+1

Nicht wirklich auf der Suche nach Multiprojekt-Builds. Wie bereits erwähnt, suche ich nach einer Art von Erbschaft. z.B. Die meisten jboss/apache maven-Projekte erben einen gemeinsamen Pom. Dann kann das allgemeine Pom im Laufe der Zeit verbessert werden und neue Versionen davon können veröffentlicht werden. Einige Richtlinien oder Regeln können dort eingefügt werden. – Murali

8

Das io.spring.dependency-management Plugin ermöglicht es Ihnen einen Maven bom verwenden Build die Abhängigkeiten zu steuern:

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath "io.spring.gradle:dependency-management-plugin:0.5.3.RELEASE" 
    } 
} 

apply plugin: "io.spring.dependency-management" 

Als nächstes können Sie es verwenden eine Maven bom zu importieren :

dependencyManagement { 
    imports { 
    mavenBom 'io.spring.platform:platform-bom:1.1.1.RELEASE' 
    } 
} 

Jetzt können Sie Abhängigkeiten importieren, ohne eine Versionsnummer festgelegt wird:

dependencies { 
    compile 'org.springframework:spring-core' 
} 
+0

Alternative zu "io.spring.gradle: dependency-management-plugin" ist https://github.com/nebula-plugins/nebula-dependency-recommender-plugin 'com.netflix.nebula: nebula-dependency-recommender'. Auch '' org.springframework.boot: spring-boot-gradle-plugin'' ab Version 1.3 verwendet '' io.spring.gradle: dependency-management-plug'' für die Verwaltung von Abhängigkeiten. – gavenkoa

1

Sie können die Parent-pom Inhalt in zu Gradle init sehr leicht Datei konvertieren. Gradle Init-Skript bietet die gleiche Funktionalität wie Maven Super/Eltern-Pom. Der grundlegende Unterschied ist, dass Sie Init-Skript

Laufzeit So viele wie von ihnen Dies gibt uns die Flexibilität, die init
Skript auf der Laufzeit zu ändern, aber Zweifel nicht die Verfolgung der Änderungen aufrufen können.

Sie müssen Repository, Verteilungsverwaltung, Profiling und andere Prüfungen wie Findbugs, Checkstyle usw. in Init-Skript aufnehmen.

Das Detail ist riesig, Sie können vollständige Informationen hier bei mir finden. http://www.scmtechblog.net/2015/12/how-to-migrate-parent-pom-from-maven-to.html

Ich habe über Gradle Release Plugin erläutert, das Maven Release Plugin ähnlich ist.