Come configurare progetto Maven multi-modulo con una corretta rilascio e la struttura versione
-
14-10-2019 - |
Domanda
Non ho potuto trovare la migliore pratica per il mio multi-modulo del progetto Maven, in termini di controllo delle versioni, di rilascio e OSGi fasci,
Prima di tutto delle versioni e relase. il progetto ha 5-6 moduli secondari con 200+ vaso in modo voluto uso aggregazione,
Caso 1: Non per specificare le versioni del progetto e la versione uso genitore
-
rilascio in questo caso se uso Maven plug-in sia tagging e pom.next è ok per lo sviluppo (mezzi ok jar3 sarà sempre utilizzare la versione più recente di jar1 che è lo stesso con se stessa) ma cosa succede se ho bisogno di fare delle patch relase solo per jar1? come posso riuscire a make relase (si dice non può rilascio progetto a causa del mancato rilascio dipendenze genitore: 0.0.2-SNAPSHOT) e se riesco a rilasciare jar1 0.0.1.1, come dire jar3 di utilizzare la versione patchata di jar1?
Parent Proejct (0.0.1-Snapshot)
Module1
Jar1
Jar2
Module2
Jar3
(Dipendenze) [Jar1 (project.version), Jar2 (project.version)]
Jar4
(Dipendenze) [Jar1 (project.version), Jar3 (project.version)]
Caso 2: Forse è una buona idea per specificare le versioni jar nel file di proprietà di genitore pom
-
in questo caso quando plug-uso di rilascio unfortunetly quando controllo pom.next i vedere che sia la versione vaso e versioni di dipendenza vengono ripristinati al hardcoded invece di proprietà (Jar1.version) in modo che per il prossimo rilascio non sarò in grado di utilizzare proprietà, e secondi sia problema anche io riesco a risolvere primo problema plugin di rilascio Maven non cambia proprietà in modo prossima release userà versioni non modificate dalla proprietà
Parent Proejct
proprietà
jar1.version
jar2.version
jar3.version
jar4.version
Module1
Jar1 (jar1.version)
Jar2 (jar2.version)
Module2 (0.0.1-Snapshot)
Jar3 (jar3.version)
(Dipendenze) [Jar1, Jar2]
Jar4 (0.0.1-Snapshot)
(Dipendenze) [Jar1, Jar3]
Sono un po 'confuso, il pensiero non ha ancora che relase e la procedura di patch sarebbe così difficile, qual è il modo migliore per gestire questo tipo di esigenza con Maven
Soluzione
finally i managed to support release(version) management for my multi-module project with //dependencyManagement\
My parent pom
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.seyn</groupId>
<artifactId>hophop</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>hophop</name>
<scm>
<connection></connection>
<developerConnection></developerConnection>
<url></url>
</scm>
<properties>
<hophop1.version>0.0.1-SNAPSHOT</hophop1.version>
<hophop2.version>0.0.1-SNAPSHOT</hophop2.version>
</properties>
<modules>
<module>../hophop1</module>
<module>../hophop2</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
<version>${hophop1.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
and my module 1 pom :
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>hophop</artifactId>
<groupId>com.seyn</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..\hophop</relativePath>
</parent>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scm>
<connection>seyn</connection>
<developerConnection>seyn</developerConnection>
<url>seyn</url>
</scm>
</project>
and my module 2 pom that depends module 1:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>hophop</artifactId>
<groupId>com.seyn</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..\hophop</relativePath>
</parent>
<groupId>com.seyn</groupId>
<artifactId>hophop2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scm>
<connection>seyn</connection>
<developerConnection>seyn</developerConnection>
<url>seyn</url>
</scm>
<dependencies>
<dependency>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
</dependency>
</dependencies>
</project>