So richten Sie das Multimodule-Maven-Projekt mit ordnungsgemäßer Veröffentlichung und Versionsstruktur ein
-
14-10-2019 - |
Frage
Ich konnte die beste Praxis für mein Multi-Modul-Maven-Projekt in Bezug auf Versioning, Release und OSGI-Bündel nicht finden.
Zuallererst Versioning und Relase. Mein Projekt verfügt über 5-6 Submodule mit mehr als 200 Glas, also wollte sie Aggregation verwenden.
Fall 1: keine Projektversionen angeben und die übergeordnete Version verwenden
In diesem Fall, wenn ich das Maven Release -Plugin sowohl Tagging als auch pom.next verwende, ist für die Entwicklung in Ordnung (OK bedeutet, dass JAR3 immer die neueste Version von JAR1 verwendet, was für sich selbst ist), aber was ist, wenn ich Patch -Relase nur für JAR1 erstellen muss? Wie kann ich es schaffen, Relase zu erstellen (es heißt, kein Projekt aufgrund von nicht freigegebenen Abhängigkeiten zu veröffentlichen, übergeordnete Eltern: 0.0.2-Snapshot) und wenn ich es schafft, JAR1 0.0.1.1 zu veröffentlichen, wie soll JAR3 sagen, dass JAR3 die Patched-Version von JAR1 verwendet?
Übergeordnete Proejct (0.0.1-Snapshot)
Modul 1
Jar1
Jar2
Modul2
Jar3
(Abhängigkeiten) [Jar1 (Projekt.version), JAR2 (Projekt.version)
Jar4
(Abhängigkeiten) [Jar1 (Projekt.version), JAR3 (Projekt.version)
Fall 2: Vielleicht ist es eine gute Idee, JAR -Versionen in der Eigenschaftsdatei von übergeordnetem POM anzugeben
In diesem Fall, wenn ich Pom.Next überprüfe, sehe ich, dass sowohl JAR -Version als auch Abhängigkeitsversionen in Hardcoded anstelle von Eigenschaften (JAR1.version) zurückgeführt werden, sodass ich für die nächste Version keine Eigenschaften verwenden kann und Eigenschaften und Eigenschaften verwenden kann und Eigenschaften und Eigenschaften verwenden kann und Eigenschaften und Eigenschaften verwenden kann und Eigenschaften und Eigenschaften verwenden können und Eigenschaften und Eigenschaften verwenden können und Eigenschaften und Eigenschaften verwenden können, und Eigenschaften und nicht in der Lage sein werde, Eigenschaften zu verwenden, und die Eigenschaften und Eigenschaften verwenden, und Eigenschaften und nicht in der Lage sein kann, Eigenschaften zu verwenden, und die Eigenschaften und Eigenschaften verwenden, und Eigenschaften nicht verwenden kann und Eigenschaften und Eigenschaften verwenden kann, und Eigenschaften und nicht in der Lage sein kann, Eigenschaften zu verwenden, und die Eigenschaften und nicht in der Lage sind, Eigenschaften zu verwenden, und die Eigenschaften nicht verwenden, und Eigenschaften und Eigenschaften verwenden, und Eigenschaften und nicht in der Lage bin, Eigenschaften zu verwenden und zu verwenden, und Eigenschaften und Eigenschaften verwenden, und Eigenschaften und nicht in der Lage bin, Eigenschaften zu verwenden und zu verwenden, und Eigenschaften und Eigenschaften verwenden kann, und Eigenschaften und nicht mehr Das zweite Problem ist sogar, dass ich es nicht schaffen kann, das 1. Problem zu lösen. Maven Release -Plugin ändert keine Eigenschaften, sodass die nächste Version nicht modifizierte Versionen von Eigenschaften verwendet
Eltern der Proejct
Eigenschaften
jar1.version
Jar2.Version
Jar3.Version
Jar4.Version
Modul 1
JAR1 (JAR1.VERSION)
Jar2 (Jar2.Version)
Modul2 (0.0.1-Snapshot)
Jar3 (Jar3.Version)
(Abhängigkeiten) [Jar1, Jar2
JAR4 (0.0.1-SNAPSHOT)
(Abhängigkeiten) [Jar1, Jar3
Ich bin verwirrt, dachte nicht, dass das Relase- und Patch -Verfahren so schwierig sein würde, was ist der beste Weg, um diese Art von Anforderungen mit Maven zu verwalten
Lösung
Schließlich habe ich es geschafft, das Management (Version) für mein Multi-Modul-Projekt mit // DependentyManagement zu unterstützen
Mein Elternteil
<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>
und mein Modul 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>
und mein Modul 2 Pom, das Modul 1 abhängt:
<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>