Hier ist meine Variation der „mehrere Artefakte aus Maven build“ Frage:Maven (EJB) Projekt mit Client- und Server-Artefakte
ich von Ant zu Maven portieren. Meine Anwendung ist ein EJB-Server, der als EAR verpackt ist, aber auch eine Client-JAR für die Verwendung durch andere Client-Apps verfügbar macht. Dieses jar enthält die EJB-Schnittstellen, die Fassadenklasse und einige Helfer.
Ich weiß, dass der Maven-Weg ein Artefakt pro Projekt (POM) haben soll; Beide Artefakte (Server-EAR und Client-JAR) müssen jedoch aus demselben Quellbaum erstellt werden - Server- und Clientfreigabe, z. B. EJB- und Home-Schnittstellen.
Wie mache ich das in Maven?
Ich habe ein Projekt mit zwei POMs, sagen wir server-pom.xml & client-pom.xml? Ich dachte, ich könnte auch ein Eltern-POM (pom.xml) haben, mit dem man sowohl Client als auch Server mit einem einzigen Foul erstellen kann? Die Lebenszyklen unterscheiden sich jedoch nach der "Paket" -Phase, da der Server durch Assembly (tar/gzip) gehen muss, während der Client nach "package" fertig ist und einfach in das Repository installiert werden kann.
Jeder Rat/Erfahrung auf dem besten Weg, dies zu nähern?
Ausgezeichnet! Lass mich das versuchen. –
@Pascal, das funktioniert gut, außer wenn der EJB-Client eine Abhängigkeit von einem anderen Modul innerhalb desselben Multi-Modul-Projekts ist. Erstens können Sie den EJB-Client nicht als verschachteltes Modul in der Elternliste von Modulen verwenden, da er keinen eigenen Ordner hat - er ist nur ein Nebenprodukt des EJB-Moduls. Zweitens wird das EJB-Client-Artefakt nur in der Paketphase erstellt, sodass der Reaktor es ohnehin nicht zum kombinierten Klassenpfad hinzufügen kann. –
So scheint es, ich muss diesen Ansatz aufgeben und ein explizites Modul für den EJB-Client erstellen. Dies bedeutet jedoch, dass dieses neue "ejb-client" -Modul die Java-Quelle mit dem Hauptmodul "ejb" teilen muss (EJB-Schnittstellen sind geteilt). Ich gehe davon aus, dass ich die Quelle im Hauptmodul "ejb" belasse und das Modul "ejb-client" so konfiguriere, dass es auf den gleichen Quellordner verweist (z. B. ../ejb/src)? –