Frage

Ich habe folgende Maven Projekte einrichten:

  • PM-Core-
  • PM-Web (mit einer Abhängigkeit zu PM-Core)
Nun wird dieses Projekt für mehrere Kunden verwendet, sondern für jeden Kunden gibt es einige kleine Unterschiede. Meist Unterschiede in Konfigurationsdateien aber einige Clients erfordern auch zusätzliche Java-Dateien (die für die anderen Clients können nicht installiert werden)

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

War es hilfreich?

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"> .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top