So erweitern / passen Sie eine WAR mit einem anderen Projekt an

8

Wir haben folgendes Szenario mit unserem Projekt:

  • Eine zentrale Webanwendung, die als Kriegsdatei (nennen Sie es Core-Projekt).
  • Die Notwendigkeit, die Kern-App "anzupassen" oder "zu erweitern" pro Kunde (nennen Sie es Kundenprojekt). Dies beinhaltet meistens neue Bean Definitionen (wir verwenden Frühling), dh. Service ersetzen Implementierungen im core.war mit kundenspezifische Implementierungen.
  • Wir wollen die Kern- und Kundenprojekte selbständig entwickeln
  • Wenn das Kundenprojekt entwickelt wird, müssen wir es in Eclipse (auf Tomcat) mit dem Core-Projekt als Abhängigkeit ausführen / debuggen können
  • Wenn das Kundenprojekt erstellt wird, enthält die resultierende WAR-Datei die Kern- und Kundenprojekte. Also ist diese .war die kundenspezifische Version der Anwendung

Ich bin auf der Suche nach Vorschlägen, wie dies am besten in Bezug auf Tooling und Projektkonfiguration zu erreichen ist.

Wir benutzen derzeit Ant, möchten aber vermeiden, in mehr Ameisen begraben zu werden. Hat jemand das mit Maven gemacht?

Ich habe eine Menge Beiträge darüber gesehen, wie man eine Webanwendung erstellt, die von einer Java-Anwendung abhängt, aber nichts von einer Webanwendung, die von einer anderen Webanwendung abhängt.

Danke!

    
Marc 03.11.2010, 14:23
quelle

5 Antworten

3

In Eclipse gibt es eine "native" WTP-Möglichkeit, dies zu tun. Es verwendet hauptsächlich verknüpfte Ordner und einen kleinen Hack in der Datei .settings / org.eclipse.wst.common.component. Sie können den Artikel darüber in Ссылка im Kapitel namens "Teilen eines Webs" lesen Modul in mehrere Projekte ". Das Problem dabei ist, dass der verknüpfte Ordner relativ zu einigen Pfadvariable kann auf der Registerkarte Fenster / Einstellungen / Allgemein / Arbeitsbereich / Verknüpfte Ressourcen definiert werden. Andernfalls enthält die Definition des verknüpften Ordners (in der Projektdatei im Projektstammordner enthalten) einen workstationspezifischen Pfad. Die Pfadvariable sollte praktisch die Wurzel des Arbeitsbereichs sein. Diese Lösung funktioniert hervorragend mit WTP, Bereitstellung und alles andere funktioniert wie es sollte.

Die zweite Lösung ist die Verwendung von Ameisen dafür. Vergiss es. Du wirst es zutiefst bereuen.

Die dritte Lösung besteht darin, maven dafür zu verwenden. Sie können den Komfort des WTP-Publishing vergessen, wenn Sie keine Tricks machen. Verwenden Sie War-Overlays wie andere vorgeschlagen. Stellen Sie sicher, dass Sie sowohl m2eclipse als auch m2eclipse Extras installieren. Es gibt kürzlich ein Erweiterungsplugin, das Ihnen helfen kann. In diesem Blog beschrieben. Ich habe es nicht versucht, aber sieht gut aus. Jedenfalls haben Maven nichts mit verlinkten Ordnern zu tun, daher denke ich, dass sogar die erste Lösung und dieses Maven-Overlay bei Bedarf zusammen leben können.

Für Headless-Builds können Sie HeadlessEclipse für die erste Lösung verwenden. Es ist tot (von mir) jetzt, aber funktioniert immer noch :). Wenn du das maven overlay + eclipse Zeug verwendest, werden kopflose Builds von maven abgedeckt.

    
Gábor Lipták 03.11.2010, 18:09
quelle
12

Klingt wie Maven WAR-Overlay tut, was Sie wollen.

    
maximdim 03.11.2010 14:33
quelle
0

Dies ist ein bisschen mehr beteiligt, aber auf einer hohen Ebene machen wir es wie unten. Wir haben die Kernplattform auf mehrere Kriegsmodule basierend auf den Funktionen aufgeteilt (login-ui, catalog-mgmt-ui usw.). Jedes dieser Kernmodule kann vom kundenorientierten Team angepasst werden.

Wir verschmelzen alle diese Module während der Bauzeit in ein einziges Kriegsmodul. Die Zusammenführungsregeln basieren auf dem montageassistenten von maven.

    
Aravind R. Yarram 03.11.2010 14:36
quelle
0

Sie beginnen normalerweise mit dem Java-Quellcode. WAR s enthalten nicht den Java-Quellcode, sondern nur die kompilierten Klassen unter WEB-INF/classes oder JAR s unter WEB-INF/libs .

Was ich tun würde ist, Maven zu benutzen und ein brandneues leeres Webapp-Projekt damit zu starten: Ссылка

Nachdem Sie die neue leere Projektstruktur haben, kopieren Sie den Java-Quellcode darauf ( src/main/java ) und füllen Sie die Abhängigkeitenliste in pom.xml .

aus

Sobald Sie all dies getan haben, können Sie mvn clean package verwenden, um eine standardmäßige WAR -Datei zu erstellen, die Sie in Tomcat bereitstellen können.

    
Luca Matteis 03.11.2010 14:39
quelle
0

Vielleicht möchten Sie Ihre Kern-App mit Plug-In-Funktionen auf Basis von Schnittstellen gestalten.

Angenommen, Ihre Kern-App hat ein Konzept für ein User -Objekt und muss Unterstützung für allgemeine benutzerbasierte Aufgaben bieten. Erstellen Sie eine UserStore -Schnittstelle;

%Vor%

Sie können dann Ihre Core-App (Anmeldelogik, Registrierungslogik usw.) für diese Schnittstelle codieren. Möglicherweise möchten Sie eine Standardimplementierung dieser Schnittstelle in Ihrer Kern-App bereitstellen, z. B. ein DatabaseUserStore , das effektiv ein DAO ist.

Dann definierst du UserStore als eine Spring-Bohne und injizierst sie wo nötig;

%Vor%

Damit können Sie die Kern-App je nach den spezifischen Kundenanforderungen anpassen oder erweitern. Wenn ein Kunde die Core-App in seinen Active Directory-Server integrieren möchte, schreiben Sie eine LDAPUserStore -Klasse, die Ihre UserStore -Schnittstelle mit LDAP implementiert. Konfigurieren Sie es als eine Spring-Bean und packen Sie die benutzerdefinierte Klasse als abhängiges jar.

Was Sie übrig haben, ist eine Kern-App, die jeder verwendet, und eine Reihe von kundenspezifischen Erweiterungen, die Sie separat anbieten und verkaufen können; huck, du kannst sogar den Kunden eigene Erweiterungen schreiben lassen.

    
Qwerky 03.11.2010 14:43
quelle

Tags und Links