Ho una domanda riguardante le proprietà in un progetto a più moduli.Le proprietà Maven nel progetto multi-modulo vengono ripristinate sui valori predefiniti
Si consideri il seguente 3 a livello di progetto struture:
project
+- pom.xml (packaging: pom) //referred to as super-pom
+- module_group
+- pom.xml (packaging: pom) //referred to as group-pom
+- module
+-pom.xml (packaging: jar) //referred to as module-pom
Nel super-pom definisco una proprietà revisione che ottiene il valore di default "sconosciuto".
Inoltre dichiaro e utilizzare il buildnumber-maven-plugin
che è configurato per ottenere la revisione svn e metterlo in proprietà revisione.
Quindi configurare lo maven-jar-plugin
per scrivere quella proprietà nel manifest.
Nel modulo-pom dichiaro l'utilizzo di buildnumber-maven-plugin
in modo che venga effettivamente eseguito.
Questo tutto funziona quando si crea il modulo direttamente, cioè eseguendo solo il modulo-pom. Il file manifest contiene la revisione riportata dallo buildnumber-maven-plugin
come viene stampato nella console.
Tuttavia, se eseguo il super-pom o gruppo-pom il valore predefinito per revisione viene scritto il manifesto, anche se il buildnumber-maven-plugin
Viene eseguito e recupera la revisione corretta (la stampa alla console prima le esecuzioni maven-jar-plugin
).
Quindi ho la sensazione che mi manca qualcosa sull'ereditarietà delle proprietà nei progetti multi-modulo.
Qualcuno ha un'idea di cosa potrebbe essere sbagliato qui? O qualcuno potrebbe indicarmi una descrizione di come vengono effettivamente gestite le proprietà in questi casi (sfortunatamente non sono riuscito a trovare una buona descrizione)?
Aggiornamento
ho fatto qualche ricerca e un paio di test viene eseguito con l'output di debug (-X
opzione) e da quello che ho trovato finora, presumo il mio problema è il seguente:
1) Durante pom parsing le proprietà utilizzate nel pom sono sostituiti con i loro valori.
Considerate questo pom parziale:
<!-- declare the property default value -->
<properties>
<revision>default</revision>
</properties>
...
<!-- use the property -->
<someconfig>${revision}</someconfig>
Dopo pom viene valutata, sembra risultare in uno stato che corrisponderebbe a questo:
<properties>
<revision>default</revision>
</properties>
...
<!-- The property seems to be "statically" replaced -->
<someconfig>default</someconfig>
2) Il plugin che imposta l'attuale il valore della proprietà viene eseguito in seguito, anche se durante la fase validate
.
Quindi la proprietà stessa è correttamente impostata sul nuovo valore, ma non viene più letta.
3) Il plugin che utilizza <someconfig>
(nel mio caso sarebbe il maven-jar-plugin
) ora gira con <someconfig>default</someconfig>
e quindi non legge revision
affatto.
Qualcuno può confermarlo?