Maven: Kombinieren Sie Webprojekte
-
20-09-2019 - |
Frage
Ich habe folgende Maven Projekte einrichten:
- PM-Core-
- PM-Web (mit einer Abhängigkeit zu PM-Core)
Ich habe unter Berücksichtigung mehr Alternativen, wie dies mit Maven zu unterstützen, aber bin noch auf der Suche nach der perfekten Lösung.
Die beste Lösung, die ich denken kann, ist ein separates Maven-Projekt für jeden Client zu erstellen (z PM-CLIENT1, ...), die nur enthält die Client-Konfigurationsdateien und zusätzliche Java-Dateien oder JSP, .... Die nächste Schritt wäre, um das PM-Web-Projekt und das Client-Projekt als ein Webprojekt zu betrachten, was bedeutet: haben sie kombiniert wird (verpackt) in 1 SIND-Datei mit Dateien aus dem Client-Projekt mit Vorrang vor Dateien aus dem PM-Webprojekt <. / p>
Konkretere. Läuft mvn package
auf PM-Client1 würde alles von PM-Web nehmen, fügen Sie / ersetzen Sie die Dateien von PM-Client1 und diese dann in einem einzigen Krieg verpacken
Die Frage ist also: wie dies mit Maven erreichen
Lösung
Ja, kann dies geschehen mit Overlays . Die Probe auf der Webseite ist genau das, was Sie reden.
Für die Projektstruktur, Sie so etwas wie dieses haben könnte:
. |-- PM-Core |-- PM-WebCommon (of type war, depends on core) |-- PM-Client1 (of type war, depends on webcommon) `-- PM-Client2 (of type war, depends on webcommon)
Und Verwendung Overlay in PM-Client1 und PM-Client2 zu "merge", um sie mit PM-WebCommon und Paket Kriegen für jeden Kunden.
UPDATE Ich werde nicht alle Details, aber ich denke, dass mit einem Umfang von Typ runtime
den Krieg Abhängigkeit zu erklären ist erforderlich, wenn Overlay verwendet wird, das ist, wie Overlay Arbeit tun (eigentlich die ganzen Overlay-Sache ist eine Art Hack). Nun zu lösen Ihre Eclipse Problem, würde eine Lösung sein, eine JAR-Datei erstellen, um die Klassen des PM-WebCommon Projektes enthält. Dazu verwenden Sie die attachClasses
optional Parameter und setzen sie sich auf true
. Dies wird zeigen, Maven eine PM-WebCommon-<version>-classes.jar
zu erstellen, dass Sie dann in der Lage sein werden als Abhängigkeit in PM-Client1 (mit provided
scope) zu erklären. Für die Details haben einen Blick auf Mwar-73 und Mwar-131 . Dies wird diskutiert auch in der FAQ des Krieges Plugin. Beachten Sie, dass dies nicht empfohlen, der richtige Weg wäre, die Klassen in ein separates Modul zu bewegen (und das ist die andere Lösung, die ich erwähnen wollte).
UPDATE (201001018): Ich habe die attachClasses
Parameter und es funktioniert mit Version 2.1-beta-1 des Plugins.
Andere Tipps
könnten Sie verwenden Profile http://maven.apache.org/guides/ Mini / guide-Aufbau-für-andere-environments.html und Verwendung Klassifizierer zwischen den Artefakten zu unterscheiden von den verschiedenen für die gleiche Version baut.
In dieser Konfiguration können Sie zusätzliche optionale Module für jeden Ihrer Kunden spezifische Anpassungen unter dem übergeordneten Projekt erstellen d
+ PM
++ PM-Core-
++ PM-Web
++ PM-Client1
++ PM-Client2
Oder Sie könnten bei Verwendung Verwendung der Maven Plugin Montage
Vergleichen auch die Antworten auf die Frage unterschiedliche WAR-Dateien href="https://stackoverflow.com/questions/334425/different-war-files-shared-resources"> .