Se si dispone di un progetto padre, è possibile dichiarare tutte le dipendenze e le relative versioni nella sezione dependencyManagement del padre padre. Questo non significa che tutti i progetti useranno tutte quelle dipendenze, vuol dire che se un progetto non dichiarare la dipendenza, che erediterà la configurazione, in modo che solo bisogno di dichiarare il groupId e artifactId della dipendenza. Puoi anche dichiarare i tuoi progetti figli nel dependencyManagement del genitore senza introdurre un ciclo.
Nota si può anche fare simile con i plugin di dichiarandoli nella sezione pluginManagement. Questo significa che ogni bambino dichiara che il plugin erediterà la configurazione.
Ad esempio, se si dispone di 4 progetti, genitore, nucleo, ui e utils, si potrebbe dichiarare tutte le dipendenze esterne e le versioni di progetto interne del genitore. I progetti figli ereditano quindi quella configurazione per tutte le dipendenze dichiarate. Se tutti i moduli devono avere la stessa versione, questi possono essere addirittura dichiarati come proprietà nel genitore.
Un genitore esempio è il seguente:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>ui</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>utils</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<modules>
<module>utils</module>
<module>core</module>
<module>ui</module>
</modules>
</project>
E i utils, Core e progetti ui ereditano tutte le versioni interessate. utils:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>utils</artifactId>
<!--note version not declared as it is inherited-->
<parent>
<artifactId>parent</artifactId>
<groupId>name.seller.rich</groupId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
</dependencies>
</project>
fondamentali:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>core</artifactId>
<parent>
<artifactId>parent</artifactId>
<groupId>name.seller.rich</groupId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>utils</artifactId>
</dependency>
</dependencies>
ui:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>ui</artifactId>
<parent>
<artifactId>parent</artifactId>
<groupId>name.seller.rich</groupId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>core</artifactId>
</dependency>
</dependencies>
</project>
Fail @Kieveli per inutile risposta non utile. – Jherico
Penso che le dipendenze condivise/comuni debbano essere sicuramente configurate nella sezione dependencyManagement. La domanda è, se una volta che vai su questo percorso non dovresti aggiungere tutte le dipendenze (condivise o meno) in dependencyManagement. Posso vedere pro e contro per entrambi. Qualche buona pratica per questo? – Hardy