Wie zu release von Maven multi-Modul-Projekt mit inter-Projekt-Abhängigkeiten?
Können sagen, wir haben 3 Schichten-Projekt. DB -, Business -, Web-und Aggregation der pom.
Project
|-DB
| |-pom.xml
|-Business
| |-pom.xml
|-pom.xml
Alle Module sind in der Nachsorge entlassen zu werden und verzweigten zusammen, so Aggregator pom konfiguriert ist, weisen Sie die gleiche version für alle Teilgebiete. Wir haben die folgenden Versionen:
DB-0.1-SNAPSHOT
Business-0.1-SNAPSHOT which depends on DB-0.1-SNAPSHOT
Web-0.1-SNAPSHOT which depends on Business-0.1-SNAPSHOT
Wenn dabei release:prepare
alle Versionen aktualisiert, um 0,1, aber bereiten Sie nicht, weil es keine DB-0.1
in Abhängigkeit noch.
Ist eine Lösung zum erstellen von verschiedenen Projekten für jedes Modul und lassen Sie Sie eins nach dem anderen, während mit versions:use-releases
plugin zu aktualisieren Abhängigkeit zu 0,1
Aber ich weiß nicht wie diese Idee, weil es erfordert eine Menge von Konfiguration und scripting. Also, ich bevorzuge die aggregation und die Freilassung aller Module mit single-Befehl, aber das problem ist, wie ich oben schrieb, bei der release-plugin versucht zu bauen Business-0.1
es gibt keine DB-0.1
im repository noch.
Gibt es eine Möglichkeit, zu verwalten, diese inter-Projekt-Abhängigkeiten?
Dank.
UPD:
installieren, auch Ziel schlägt fehl.
- DB-Bauen - OK (kein snapshot noch die version in einem repository)
- Business - Ausfall (DB-0.1-SNAPSHOT nicht im repository. Aber es ist auch nicht sein soll, gibt es noch!)
Bin ich mit maven-3.0.2-und release-plugin 2.1
- Sie haben aufgeführt, Geschäfts-und DB als Module des parent-POM, richtig? Und Sie läuft release:bereiten Sie nur auf die parent-POM, richtig? Die Funktionalität, die Sie beschreiben, funktioniert out-of-the-box, ganz normal.
- Ja es läuft, WENN das Geschäft hängt davon ab, ältere Versionen der DB, die bereits im repository. Aber wenn Sie versuchen, verweisen auf die neue version, die nicht im repository, wie es war, nicht auch noch gebaut werden, dann Nein, es funktioniert nicht ...
- Es muss nicht in den repo - Maven, wird der Blick in den "Reaktor" (ie-aktuell-Aufbau-Module) zuerst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
sollte Ihr Projekt definieren die version, die nur in der übergeordneten (Projekt -) nur einmal. Und lassen Sie alle anderen Module haben eine Beziehung. Dies bedeutet, dass Sie nicht über eine aggregation. Sie haben eine multimodule bauen statt.
Dieser wird Ihr problem lösen (Eventuell kann man eine schauen Sie hier, wie ein Beispiel).
Für das multi-Modul-Projekt, wenn man sich nicht für ein Kind snapshot-Abhängigkeit versuchen, diese
release:saubere release:prepare-release:perform-DignoreSnapshots=true
Hoffe, es hilft.
War ich in der Lage, erfolgreich zu tun, diese mit Maven 3.3.9...aber lassen Sie mich beschreiben, mein Fall:
Arbeite ich mit einem Java-framework namens Liferay, wo es ein tool namens-Service-generator, die erstellen und bereitstellen von Diensten mithilfe von Maven mit der genauen Struktur, wie Sie beschrieben:
Wie Sie sehen können, ist die portlet-app-Modul ist gebaut mit die Dienstleistung einer Abhängigkeit, die ist ein .jar-Datei, die packs Schnittstellen unter anderem für die Dienstleistungen zu arbeiten.
Durch die Art und Weise habe ich das bei meinem Projekt mit Modulen von verschiedenen Versionen. Ich fand einen interessanten Artikel sprechen über diese Praxis: Releasing-Module ein multi-Modul-Projekt mit unabhängigen version zahlen. Lesen Sie das abstract, um Ihre eigenen Schlüsse ziehen über, wenn die Versionierung von Modulen geeignet ist oder nicht... aber aus meiner Sicht, nach dem Lesen der Anforderungen des Kunden, so scheint es mir vernünftig, dass die Versionierung von Modulen sollte ein unterstütztes feature von Maven, ohne dabei allzu schmerzhaft zu implementieren.
Läuft
mvn release:prepare
undmvn:perform
innerhalb der übergeordneten (Service Layer), war der Weg zu gehen. Maven macht die release-Gebäude und-Bereitstellung in der folgenden Reihenfolge: 1) parent-pom 2) service-Abhängigkeiten 3) service portlet.Maven kümmerte sich um die Bestellung, und das ist gut...aber der service-Abhängigkeits-ist basiert auf der portlet-source-code, mit einem Ziel in das übergeordnete Projekt:
mvn liferay:build-service
...also die Abhängigkeit betroffen ist, indem Sie den Quellcode der portlet-app (klingt ein wenig verrückt). Das war eine knifflige Teil in meinem Fall.Also, wie bekommen wir die service-Abhängigkeit erstellt und bereitgestellt, die für die service-portlet, um es zu verwenden?
Gut, die Lösung war die Verwendung einer Konfiguration innerhalb des maven-release-plugin, das erlaubt Maven ausführen, insbesondere die Ziele in den
release:perform
phase innerhalb der Projekte. Was ich habe ist das hinzufügen dieser Konfiguration in maven-release-plugin Erklärung der Eltern pom.xml (Service Layer):- Und Maven-war in der Lage bereitstellen, die Eltern und jedes der Kinder, für Module mit unsere bevorzugte version zahlen (Sie werden aufgefordert, Ihnen).
Zusammengefasst Antwort und Empfehlung: versuchen Sie es mit der
<goals>
Konfiguration und führen Siemvn release:prepare
undmvn release:perform
auf der übergeordneten EbeneEltern und Module eingesetzt werden sollte, nach der Bestellung.
Ich hoffe, das inspiriert jemand in einer ähnlichen situation mindestens nach 5 Jahren.