2016-06-15 6 views
2

Ich habe die folgende Pom-Definition (unten).Maven: Wiederverwendung einzelner Versionsdefinition beim Referenzieren von Elternpom

Ich habe viele Kinder Poms (50 Projekte), ich muss alle Poms auf jedem Release aktualisieren, zum Beispiel beim Wechsel von 1.0 zu 1.1.

Wie kann ich die Version an einem einzigen Ort definieren und in allen Poms wiederverwenden?

EDIT - Einige Motivation über die Anfrage: Ich möchte so wenig Fußabdruck wie möglich machen, wenn Version wechseln. Als kleine Dateien zu ändern. So wenig Commits zu pushen. Usw.

BEARBEITEN - Die übergeordneten Eigenschaften können nicht verwendet werden, bevor das übergeordnete Element geladen wird.

<parent> 
    <groupId>info.fastpace</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

<artifactId>child-1</artifactId> 
+0

Ich bin mir nicht bewusst, eine glänzende Lösung. Es gibt einige Dinge, die Sie tun können, z. B. Bereiche verwenden. Siehe https://www.igorkromin.net/index.php/2015/11/08/getting-around-mavens-parent-child-project-version-dependency-issue/, die auch einen Einblick in die maven-Pläne bietet. – wemu

+1

Sie müssen etwas falsch machen. Das 'maven-release-plugin' macht das automatisch (update POM-Versionen) und sollte bei der Freigabe des Projekts verwendet werden. – Tunaki

+0

@Tunaki - Wie aktualisiere ich nach der Veröffentlichung die Version in den Pom-Dateien? –

Antwort

0

Sie können maven-Eigenschaften verwenden, um ein einzelnes Versionsnummerierungsschema zu erstellen. So:

<properties> 
<my.version>1.1.2-SNAPSHOT</my.version> 
</properties> 

Und dann es wie folgt verweisen:

<version>${my.version}</version> 

hier für weitere Informationen suchen: Maven version with a property

+0

Die Version muss immer noch für jedes untergeordnete Pom (in den Eigenschaften) definiert werden. –

1

I Eigenschaften der Eltern und die Eltern statt relativen Pfad Referenz verwenden können der Version. Beispiel:

Parent:

<groupId>info.fastpace</groupId> 
<artifactId>parent</artifactId> 
<version>${global.version}</version> 

<properties> 
    <!-- Unique entry point for version number management --> 
    <global.version>1.0-SNAPSHOT</global.version> 
</properties> 

Kind:

<parent> 
    <groupId>info.fastpace</groupId> 
    <artifactId>parent</artifactId> 
    <version>${global.version}</version> 
    <relativePath>..</relativePath> 
</parent> 

<artifactId>child-1</artifactId> 

Nachteil: Erfordert das übergeordnete pom im Dateisystem zu existieren und alle Entwickler die gleichen relativen verwenden machen Dateistruktur.

Weitere Informationen here.

+0

Von hier http://stackoverflow.com/questions/10582054/maven-project-version-inheritance-do-i-have-to-specify-the-parent-version –

+1

Dies ist keine gute Idee, noch ist es erforderlich. Bessere Versionen-Plugin oder Release-Plugin, das ist es. Oder Sie müssen Maven 3.2.1 oder höher verwenden, die Unterstützung dafür hat. [Siehe Release Notes für Maven 3.2.1] (http://maven.apache.org/docs/3.2.1/release-notes.html) – khmarbaise

+0

@khmarbaise - zögern Sie nicht, eine Antwort zu posten. –

-1

Die Verwendung von Eigenschaften wird empfohlen, wenn mehrere Abhängigkeiten derselben Version vorhanden sind. Zum Beispiel:

<project> 
    ... 
    <properties> 
     ... 
     <dep.jooq.version>3.7.3</dep.jooq.version> 
     ... 
    </properties> 
    ... 
    <dependencies> 
     ... 
     <dependency> 
      <groupId>org.jooq</groupId> 
      <artifactId>jooq</artifactId> 
      <version>${dep.jooq.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jooq</groupId> 
      <artifactId>jooq-meta</artifactId> 
      <version>${dep.jooq.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jooq</groupId> 
      <artifactId>jooq-codegen</artifactId> 
      <version>${dep.jooq.version}</version> 
     </dependency> 
     ... 
    </dependencies> 
    ... 
</project> 

Stattdessen, wenn Sie die gleiche Abhängigkeit in verschiedenen Punkten in der POM-Datei verwenden, oder wenn Sie in Modul sind und Sie würden die gleiche Abhängigkeit Version der Eltern verwenden, schlage ich das verwenden folgender weg:

<project> 
    ... 
    <dependencyManagement> 
     <dependencies> 
      ... 
      <dependency> 
       <groupId>group-a</groupId> 
       <artifactId>artifact-a</artifactId> 
       <version>1.0</version> 
      </dependency> 
      ... 
     <dependencies> 
    </dependencyManagement> 
    ... 
    <dependencies> 
     ... 
     <!-- The following block could be in a module --> 
     <dependency> 
      <groupId>group-a</groupId> 
      <artifactId>artifact-a</artifactId> 
      <!-- It is no more ncessary to use the version --> 
     </dependency> 
     ... 
    <dependencies> 
    ... 
</project> 
+0

Wie löst dies das Problem der Eltern-Pom-Version? –

+0

In der POM-Datei des einzelnen Moduls können Sie die Version der Abhängigkeit angeben. Wenn Sie das übergeordnete POM verwenden, überschreiben die Versionen in der ** dependencyManagement ** die Versionen der Submodule. – Sandro