2012-10-30 12 views
6

Abbiamo la seguente struttura di progetto in SVN con un progetto principale (non aggregatore) che definisce la configurazione comune. Il genitore è gestito e rilasciato individualmente.Maven URL SCM relativo al genitore

trunk 
    +parent 
     pom.xml 
    +project1 
     pom.xml 
     +project1_1 
      pom.xml 
     +project1_2 
      pom.xml 
    +project2 
     pom.xml 

Quindi, in pratica ogni vero e proprio progetto (project1, project2) è usato come un aggregatore per le sue sotto-progetti. Le impostazioni di configurazione comuni (versione Java Compiler, altri plug-in) sono mantenute nel genitore, che viene utilizzato come Maven parent in tutti i progetti (progetto1, progetto2).

Una delle impostazioni che vorrei definire nel genitore è l'URL SCM per Subversion, ad es. http://svnhost/base/trunk/parent nel padre pom.xml.

Quando faccio questo, i singoli progetti ereditano questa impostazione, ma ovviamente non riflettono la natura relativa del percorso. Nel progetto , questo è risolto in http://svnhost/base/trunk/parent/ - L'ho verificato con mvn help:effective-pom.

C'è un modo per specificare la connessione SCM in modo che sia risolto rispetto al genitore? O devo fornire l'URL SCM in ogni singolo progetto?

risposta

3

Dovrebbe essere possibile se si utilizzano proprietà come ${svn.host} e ${svn.path} per creare scm.url. Il plug-in di rilascio ha un bug in cui le proprietà vengono sostituite durante una versione: http://jira.codehaus.org/browse/MRELEASE-128 ma dalla versione 2.3 sembra essere stato risolto. Quindi i poms di tuo figlio definiscono solo le proprietà ma non più l'url scm.

Non so se questo aiuti. Non si salvano molte righe nel pom.xml e si introduce il pericolo che le persone non cambino le proprietà.

Se si definisce una proprietà del parent.scm.url nel genitore e quindi utilizzare la proprietà nel bambino l'aggiunta di un URL relativo (<scm.url>${parent.scm.url}/../myproject</scm.url>) Se fai percorso relativo a scm.url sulla base di che la proprietà è ancora non salvare gran parte della configurazione?

Penso che per fare esattamente ciò che vuoi tu hai bisogno di scrivere un plugin che legga il parent-url, quindi legge l'url dalla copia di lavoro corrente (dato che maven non sa dove trovare l'URL del progetto, dal non è configurato) e quindi calcola il relativo percorso da esso. Penso che sia un po 'strano rispetto a ripetere la configurazione scm.url in ogni pom.

+0

Grazie - anche queste sono le mie scoperte. Penso che definirò semplicemente l'URL SCM in ogni progetto di aggregatore di primo livello (progetto1, progetto2 nel mio esempio), dal momento che non otterrò molto dall'uso delle variabili. – nwinkler

2

All'interno di una build multi-modulo è sufficiente definire la connessione scm al livello root del progetto. Ma il layout del tuo progetto non sembra una configurazione corretta. Perché non metti il ​​tuo genitore/pom.xml direttamente nella cartella trunk? Se è necessario rilasciare separatamente il genitore questa è un'indicazione per rendere il genitore davvero un progetto indipendente di stand-a-online.

+0

Bene, il genitore è un progetto stand-alone, che dovrebbe contenere impostazioni comuni per tutti gli altri progetti. Ogni progetto di livello superiore (progetto1, progetto2 nel mio esempio) funziona come aggregatore per i suoi moduli. Sembra che dovrò specificare l'URL SCM in ciascuno di questi progetti di livello superiore, mentre posso mantenere altre impostazioni (ad esempio il repository Maven da distribuire a) nel POM padre centrale. – nwinkler

+0

Penso che se si spostano i progetti nella cartella principale in SVN ma non li si aggiunge come modulo al root pom l'unico problema che rimane è che si aggiungono tutti i progetti al tag creato quando si rilascia il pom principale. Ma il modo in cui descrivi è molto più "mavenish" - lo userei. – wemu

Problemi correlati