So richten Sie das Multimodule-Maven-Projekt mit ordnungsgemäßer Veröffentlichung und Versionsstruktur ein

StackOverflow https://stackoverflow.com/questions/4584296

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

War es hilfreich?

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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top