Sembra che ci siano diversi modi per strutturare i genitori in una build multiprogetto e mi chiedo se qualcuno abbia avuto qualche idea su quali siano i vantaggi / gli svantaggi in ogni modo.
Il metodo più semplice per avere un padre genitore sarebbe metterlo alla radice di un progetto cioè
myproject/
myproject-core/
myproject-api/
myproject-app/
pom.xml
dove pom.xml è sia il progetto principale che descrive i moduli -core -api e -app
Il metodo successivo consiste nel separare il genitore nella propria sottodirectory come in
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
Dove il pom padre contiene ancora i moduli ma sono relativi, ad esempio ../myproject-core
Infine, c'è l'opzione in cui la definizione del modulo e il genitore sono separati come in
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
Dove il pom padre contiene qualsiasi configurazione "condivisa" (dependencyManagement, proprietà ecc.) E il myproject / pom.xml contiene l'elenco dei moduli.
L'intenzione è di essere scalabile su una build su larga scala, quindi dovrebbe essere scalabile su un gran numero di progetti e artefatti.
Alcune domande bonus:
- Qual è il posto migliore per definire le varie configurazioni condivise come nel controllo del codice sorgente, nelle directory di distribuzione, nei plugin comuni ecc. (Sto assumendo il genitore ma sono stato spesso morso da questo e sono finiti in ogni progetto piuttosto che uno comune).
- In che modo il plug-in di rilascio Maven, Hudson e Nexus affrontano il modo in cui hai impostato i tuoi multi-progetti (forse una domanda gigantesca, è più se qualcuno è stato sorpreso quando da come è stata creata una build multi-progetto)?
Modifica: Ognuno dei sottoprogetti ha il proprio pom.xml, l'ho lasciato fuori per tenerlo conciso.