Gleiche Maven Versions in Child Modulen

Diskutiere Gleiche Maven Versions in Child Modulen im Allgemeine Java-Themen Bereich.
T

tummigummi1984

Hallo zusammen

ich habe ein Maven Project mit Modulen und Child Modulen.
Die Strutur sieht so in etwa aus :

Parent
|
|-- Child Module 1
|
| -- SubChildModule 1
|
|-- Child Module 2
|
| -- SubChildModule 2
|
|-- Child Module 3
|
| -- SubChildModule 3

Ich möchte nun in der parent pom eine Versionsnummer definieren, die ich in allen Child Modulen verwenden kann.
In jedem Child Module habe ich die parent pom eingetragen und in jedem SubChildModule habe ich das Child Module als Parent eingetragen.

In der Parent Pom habe ich das Property definiereniert :
parent pom :
Code:
<properties>
        <calendarVersion>1.3-SNAPSHOT</calendarVersion>
    </properties>

<groupId>volleyball</groupId>
<artifactId>calendar</artifactId>
<version>${calendarVersion}</version>
Auszug aus einer Child Pom :
Code:
    <!-- define the parent project -->
    <parent>
        <groupId>volleyball</groupId>
        <artifactId>calendar</artifactId>
        <version>${calendarVersion}</version>
    </parent>

    <artifactId>repository</artifactId>

    <dependencies>
        <!--internal dependencies -->
        <dependency>
            <groupId>volleyball</groupId>
            <artifactId>model</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
ich habe versucht mit dem Command :
mvn clean package -DcalendarVersion=1.4-SNAPSHOT
das Project zu bauen. Aber ich bekomme immer die Fehlermeldung :

[ERROR] The project volleyball:calendar:${project.version} (/home/sebastian/git/dev-volleyball/calendar/pom.xml) has 1 error
[ERROR] Non-resolvable parent POM for volleyball:calendar:${project.version}: Failure to find volleyball:volleyball:pom:${project.version} in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 8, column 13 -> [Help 2]

Kann mir jemand helfen
 
L

LimDul

Das Problem ist ja auch - wenn du zwei Versione hast, eine calender version 1.3 wo in der Properties 1.3 stet und eine Version 1.4, wo dann als Property 1.4 steht - welche Parent Version soll er denn ziehen? Es wären ja beide gültig. Das was du machst ist eine zirkuläre Referenz, du definierst in der Parent POM die Versionsnummer. In der Child Pom willst auf diese Versionsnummer referenzieren um die Parent POM zu ermitteln - das heißt du musst die Parent-POM kenne um die Versionsnummer zu wissen - aber gleichzeitig brauchst du die Versionsnummer um die Parent Pom zu kennen.
 
T

tummigummi1984

Ja schon aber genau das gleich wird doch hier auch gemacht :

Es wird in der parent Pom eine Version definiert, die in der Child Pom verwendet wird. Also warum geht es dort ?

Oder anders gefragt gibt es einen eleganteren Weg, dass alle Module und Submodule die gleiche Version haben
 
H

httpdigest

Ja schon aber genau das gleich wird doch hier auch gemacht :
Es wird in der parent Pom eine Version definiert, die in der Child Pom verwendet wird. Also warum geht es dort ?
Nein. Weder in der Frage noch in einer Antwort wird eine Property definiert, die dann in der parent.version in einem Child-Modul als Property verwendet wird. Vielleicht schickst du nochmal den Link zu der genauen Antwort, die das deiner Meinung nach tut.

Oder anders gefragt gibt es einen eleganteren Weg, dass alle Module und Submodule die gleiche Version haben
https://stackoverflow.com/questions...to-specify-the-parent-version#answer-51969067
 
T

tummigummi1984

Der Link ist schon richtig. Schau mal heir :

Code:
As Yanflea mentioned, there is a way to go around this.

In Maven 3.5.0 you can use the following way of transferring the version down from the parent project:
Parent POM.xml

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mydomain</groupId>
    <artifactId>myprojectparent</artifactId>
    <packaging>pom</packaging>
    <version>${myversion}</version>
    <name>MyProjectParent</name>

    <properties>
        <myversion>0.1-SNAPSHOT</myversion>
    </properties>

    <modules>
        <module>modulefolder</module>
    </modules>
    ...
</project>

Module POM.xml

<project ...>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.mydomain</groupId>
        <artifactId>myprojectmodule</artifactId>
        <version>${myversion}</version> <!-- This still needs to be set, but you can use properties from parent -->
    </parent>

    <groupId>se.car_o_liner</groupId>
    <artifactId>vinno</artifactId>
    <packaging>war</packaging>
    <name>Vinno</name>
    <!-- Note that there's no version specified; it's inherited from parent -->
    ...
 
H

httpdigest

Hmm, also ich habe mal einen Test gemacht mit genau folgendem Setup:
Parent pom.xml:
XML:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>parent</artifactId>
  <version>${revision}</version>
  <packaging>pom</packaging>
  <properties>
    <revision>1.0.0-SNAPSHOT</revision>
  </properties>
  <modules>
    <module>module1</module>
  </modules>
</project>
Child pom.xml (module1/pom.xml):
XML:
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>test</groupId>
    <artifactId>parent</artifactId>
    <version>${revision}</version>
  </parent>
  <groupId>test</groupId>
  <artifactId>child</artifactId>
</project>
Das baut mit dem aktuellen Maven 3.6.3 wunderbar.
 
T

tummigummi1984

Wie hast du das per maven gebaut. Also kannst du bitte noch den BEfehl posten
 
mrBrown

mrBrown

Was willst du denn erreichen? Wenn du nur die Version einfach updaten können willst, kannst du auch einfach das Dependecy-Plugin nutzen.
 
T

tummigummi1984

Ich habe das Beispiel machgestellt und es auch hinbekommen. Wenn ich aber nun ein 2. Modul einfüge, welches aus dem erste referenziert wird bekomme ich folegden Fehler :

[ERROR] Failed to execute goal on project child2: Could not resolve dependencies for project test:child2:jar:1.0.0-SNAPSHOT: Could not find artifact test:child1:jar:1.0.0-SNAPSHOT -> [Help 1]
[ERROR]


Hier meine pom :

Code:
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>test</groupId>
    <artifactId>parent</artifactId>
    <version>${revision}</version>
  </parent>
  <groupId>test</groupId>
  <artifactId>child2</artifactId>

    <dependencies>
        <!--internal dependencies -->
        <dependency>
            <groupId>test</groupId>
           <artifactId>child1</artifactId>
<version>${project.version}</version>
        </dependency>
    </dependencies>
</project>
 
T

tummigummi1984

Was willst du denn erreichen? Wenn du nur die Version einfach updaten können willst, kannst du auch einfach das Dependecy-Plugin nutzen.
Ich möchte an einer zentralen Stelle die Versionsnummber eintragen und alle Module sollen dann diese Versionsnummer haben
 
H

httpdigest

Ich habe das Beispiel machgestellt und es auch hinbekommen. Wenn ich aber nun ein 2. Modul einfüge, welches aus dem erste referenziert wird bekomme ich folegden Fehler :
Auch das funktioniert bei mir problemlos. Hier nochmal alle pom.xml's:
Parent:
XML:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>parent</artifactId>
  <version>${revision}</version>
  <packaging>pom</packaging>
  <properties>
    <revision>1.0.0-SNAPSHOT</revision>
  </properties>
  <modules>
    <module>module1</module>
    <module>module2</module>
  </modules>
</project>
module1/pom.xml:
XML:
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>test</groupId>
    <artifactId>parent</artifactId>
    <version>${revision}</version>
  </parent>
  <groupId>test</groupId>
  <artifactId>child1</artifactId>
</project>
module2/pom.xml:
XML:
<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>test</groupId>
    <artifactId>parent</artifactId>
    <version>${revision}</version>
  </parent>
  <groupId>test</groupId>
  <artifactId>child2</artifactId>
  <dependencies>
    <dependency>
      <groupId>test</groupId>
      <artifactId>child1</artifactId>
      <version>${revision}</version>
    </dependency>
  </dependencies>
</project>
Frage: Hast du das zweite Modul auch als module in dem Parent eingetragen?
 
mrBrown

mrBrown

Alternativ setzt mvn versions:set -DnewVersion=X.Y.Z die Version für alle Module in einem Projekt, ohne das man in zig Modulen irgendwas händisch anpassen muss.
 
Thema: 

Gleiche Maven Versions in Child Modulen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben