Maven: Combinare progetti web
-
20-09-2019 - |
Domanda
Ho seguito i progetti Maven allestiti:
- PM-core
- PM-Web (con una dipendenza per PM-Core)
Ho preso in considerazione diverse alternative su come sostenere questo con Maven, ma sto ancora cercando la soluzione perfetta.
La soluzione migliore che viene in mente è quello di creare un progetto Maven separato per ogni cliente (ad esempio, PM-CLIENT1, ...), che contiene solo il client specifico file di configurazione e file Java aggiuntivi o jsp, .... Il passo successivo sarebbe quello di considerare il progetto PM-Web e il progetto client come un progetto web, il che significa: li hanno combinati (confezionati) in 1 file guerra con i file del progetto client avere la precedenza sul file dal progetto PM-web <. / p>
Più concreta:. Esecuzione mvn package
on PM-Client1 avrebbe preso tutto da PM-Web, aggiungere / sostituire i file dal PM-Client1 e poi confezionare questo in una sola guerra
Quindi la domanda è:? Come raggiungere questo obiettivo con Maven
Soluzione
Sì, questo può essere fatto utilizzando Sovrapposizioni . Il campione sulla pagina web è esattamente ciò che si sta parlando.
Per la struttura del progetto, si potrebbe avere qualcosa di simile:
. |-- 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)
E utilizzare overlay in PM-Client1 e PM-Client2 di "fondere" loro con PM-WebCommon e pacchetto guerre per ogni cliente.
Aggiorna Non voglio coprire tutti i dettagli, ma credo che dichiarare la dipendenza guerra con un ambito di tipo runtime
è necessaria quando si utilizza overlay, questo è il modo overlay funzionano (in realtà, l'intera cosa sovrapposizione è un tipo di hack). Ora, per risolvere il problema di Eclipse, una soluzione potrebbe essere quella di creare un JAR contenente le classi del progetto PM-WebCommon. Per fare ciò, utilizzare il attachClasses
opzionale parametri e impostarlo su true
. Questo dirà Maven per creare un PM-WebCommon-<version>-classes.jar
che sarete quindi in grado di dichiarare come dipendenza nel PM-Client1 (con una portata provided
). Per i dettagli, dare un'occhiata alla MWAR-73 e MWAR-131 . Questo è anche discusso nel FAQ della guerra collegare. Si noti che questa non è una pratica consigliata, il modo giusto sarebbe quello di spostare le classi per un modulo separato (e questa è l'altra soluzione che volevo parlare).
Aggiorna (201001018): ho provato il parametro attachClasses
e funziona con la versione 2.1-beta-1 del plugin.
Altri suggerimenti
Si potrebbe utilizzare profili vedere http://maven.apache.org/guides/ mini / guida-costruzione-per-differente-environments.html Utilizzando classificatori di distinguere tra i manufatti dalla diversa costruisce per la stessa versione.
In questa configurazione, è possibile creare moduli opzionali aggiuntivi per ciascuno dei vostri clienti personalizzazioni specifiche nell'ambito del progetto principale cioè
+ PM
++ PM-Core
++ PM-Web
++ PM-Client1
++ PM-Client2
Oppure si potrebbe guardare con utilizzare il Maven plug-assemblaggio
Confronto anche le risposte per domanda diverso file WAR, risorse condivise .