Wir haben folgendes Szenario mit unserem Projekt:
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!
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.
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.
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
.
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.
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;
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;
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.