Domanda

Ho seguito i progetti Maven allestiti:

  • PM-core
  • PM-Web (con una dipendenza per PM-Core)
Ora, questo progetto è usato per diversi clienti, ma per ogni cliente ci sono alcune piccole differenze:. Sono soprattutto le differenze nei file di configurazione, ma alcuni clienti richiedono anche i file Java aggiuntivi (che non possono essere installati per gli altri clienti)

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

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top