Maven Parent- Child POMs

PollerJava

Top Contributor
Hallo,

ich hätte eine Frage zu einem Maven Reactor Projekt .
Ich hab eine parent- POM und Child- POMs.
In den Child- POMs hab ich natürlich die Referenz auf die Parent POM.
Wenn ich jetzt ein neues Release mache, hab ich bis jetzt in der Parent- POM eine neue Version eingetragen und in den child- POMs musste ich dann natürlich auch die Version der parent- POM nachziehen.
Meine Frage wäre jetzt, ob es da eine bessere Möglichkeit gibt, damit ich nicht immer die Child- Versionen ändern muss.

Vielen Dank!!


Parent- Eintrag in den Childs:
HTML:
<parent>
		<groupId>groupId</groupId>
		<artifactId>artifactId</artifactId>
		<version>1.0.0</version>
		<relativePath>../a/b/c.pom</relativePath>
	</parent>
 

PollerJava

Top Contributor
Leider bekomm ich folgende Fehlermeldung, ich hab schon gesucht danach, aber ich kanns ehrlich gesagt nicht lösen, ich habe in meiner parent- POM auch die Child- Module angegeben usw.
Vielleicht hat noch mal jemand eine Idee, was ich machen kann um das zu lösen.
Besten Dank,


Project build error: Non-resolvable parent POM: Failure to transfer from http://
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. Original error:
Could not transfer artifact ...:pom:${project.parent.version} from/to central (404 Not Found
Illegal character in path at index 99: ... and 'parent.relativePath' points at wrong local POM
 

PollerJava

Top Contributor
main- Projekt (with maven dependencyManagement)
Code:
<modelVersion>4.0.0</modelVersion>
	<groupId>groupId</groupId>
	<artifactId>artifactId</artifactId>
	<packaging>pom</packaging>
	<name>name</name>

        <!-- erbt von parent master POM -->
	<parent>
		<groupId>parentMasterGroupId</groupId>
		<artifactId>parentMasterArtifactId</artifactId>
		<version>1.1.1</version>
		<relativePath>../parentmasterpath/pom.xml</relativePath>
	</parent>

<!-- here modules are defined -->

child- POM
Code:
<parent>
		<groupId>mainGroupId</groupId>
  		<artifactId>mainArtifactId</artifactId>
  		<version>1.1.1</version>
		<relativePath>../mainPOM/pom.xml</relativePath>
  </parent>

Ich hab also eine master- POM, eine main- POM leitet von der Master- POM ab (hier sind auch die Module definiert) und dann gibt es eben noch die child POMs.
 

BuckRogers

Bekanntes Mitglied
Wieso brauchst du Main und Master POM?
Eigentlich reicht eine Main-POM und die Child-POMs.

Ich denke mir jetzt mal das Master-POM die oberste ist, welche applikationsweit gilt. Dann sind die Main-POMs die der Module und die Child-POMs in den Modulen für jeweiliges Packaging, DependencyMgmt etc.

Master:
HTML:
<groupId>masterName</groupId>
    <artifactId>masterName</artifactId>
    <version>1.0-SNAPSHOT</version>

<modules>
        <module>mainName1</module>
        <module>mainName2</module>
    </modules>
Main
HTML:
<parent>
        <groupId>masterName</groupId>
        <artifactId>masterName</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>mainName</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>childName-war</module>
    </modules>
Child
HTML:
 <parent>
        <relativePath>../../mainName</relativePath>
        <groupId>masterName</groupId>
        <artifactId>childName</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>masterName</groupId>
    <artifactId>childName-war</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

so sieht es bei mir aus und es funktioniert. Du solltest vielleicht in der Child-Pom groupId auf dein Master-POM verweisen?

Jedoch sagt deine Fehlermeldung aus, dass der relative Pfad nicht stimmt.
 
Zuletzt bearbeitet:

PollerJava

Top Contributor
So wie du oben beschrieben hast, funktionierts bei mir auch (master ist die unternehmensweite POM, main ist die Projekt- POM). Bei mir funktioniert aber das nicht:
Child-POM:
HTML:
    <parent>
        <relativePath>../../mainName</relativePath>
        <groupId>masterName</groupId>
        <artifactId>childName</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>masterName</groupId>
    <artifactId>childName-war</artifactId>
    <version>${project.parent.version}</version>
    <packaging>war</packaging>
 
Zuletzt bearbeitet:

BuckRogers

Bekanntes Mitglied
Hast du die groupId des child-poms auf den masterNamen geändert? Hast du den relativen Pfad im child-pom geändert, bzw probiert ob ein Verweis zu einem höherenpom funktioniert?
 

kama

Top Contributor
Die erste Frage ist, ob Du einen multi module Build hast?

Nach Deiner Beschreibung hört sich das so an...

Also mal die Struktur wie es sein sollte: (das dann hier liegt wird dann in den trunk bei SVN oder in den master bei git eingecheckt):

Code:
 +-- pom.xml (parent)
        +--- pom.xml (child1)
        +--- pom.xml (child2)

Dabei sollten die Childs jeweils auf den Parent verweisen (aber OHNE relativePath)...relativePath etc. wie Du angedeutet hast macht keinen Sinn....

Code:
    <groupId>com.group.x</groupId>
    <artifactId>project-parent</artifactId>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>child1</module>
        <module>child2</module>
    </modules>

Dann das jeweilige Child:
Code:
   <parent>
      <groupId>com.group.x</groupId>
      <artifactId>project-parent</artifactId>
      <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>childName-war</artifactId>
    <packaging>war</packaging>

In der Regel brauch man kein weitere Angabe für groupId da diese vom Parent übernommen wird. Das gilt auch für die Version. Die GroupId anpassen macht man nur bei großen Projekten....

Um nun die Version auf einen neue/andere Version zu setzen für eine Release kann man das in Unterschiedlichen Formen machen.

1. Manuelle Variante

Man nimmer das versions-maven-plugin wie folgt:
Code:
mvn versions:set -DnewVersion=NEUE_VERSION
Zum Beispiel:
Code:
mvn versions:set -DnewVersion=2.0.0
Dann werden alle Versionen in den Parents als auch bei Module Abhängigkeiten entsprechend angepasst. Dann einchecken. Dann einen Tag Setzen und
Code:
mvn deploy

2. Automatische Variaten

Man nimmt das maven-release-plugin:

Code:
mvn release:prepare release:perform

Dazu ist aber notwendig, dass der SCM Eintrag in der Parent POM gepflegt ist...

MfG
Karl Heinz Marbaise
 

PollerJava

Top Contributor
Hallo kama,

vielen Dank für die ausführliche Antwort. Das heißt aber auch, dass ich auch in der child poms im parent tag einen versionseintrag habe und diese Versionen dann mittels.

Code:
mvn versions:set -DnewVersion=2.0.0

gesetzt werden. ${project.parent.version} kann ich da auf keinen Fall in den child- POMs verwenden.
Kann man das so sagen?

Vielen Dank.
Poller
 

kama

Top Contributor
Hi,

in den Child POM ist das nicht notwendig...und macht wenn man genau darüber nachdenkt auch keinen sinn...

Code:
  <parent>
      <groupId>com.group.x</groupId>
      <artifactId>project-parent</artifactId>
      <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>childName-war</artifactId>
    <packaging>war</packaging>
    <description>...</description>

Wo soll ich bei obigem denn ${project.parent.version} nutzen ? Da die Version ja vererbt wird führt sich das sozusagen selbst ad absurdum...

Weiterhin wird die Nutzung von Platzhaltern im Version-Tag nicht unterstützt und führt auch zu einer entsprechenden Meldung (Abbruch).

Mit Maven 3.2.1 kannst Du mehrere Platzhalter verwenden und zwar überall anstatt z.B. 1.0-SNAPSHOT hart Kodiert...z.B so etwas wie
Code:
1.0-${revision}
anstelle von version:

Code:
  <parent>
      <groupId>com.group.x</groupId>
      <artifactId>project-parent</artifactId>
      <version>1.0-${revision}</version>
    </parent>

    <artifactId>childName-war</artifactId>
    <packaging>war</packaging>
    <description>...</description>
verwendent und dann in der Kommandozeile muss aber folgendes:
Code:
mvn -Drevision=SNAPSHOT clean package
angeben werden.

Oder man kann dann die Information aus dem Versionskontrollsystem nehmen (Git SHA1 oder by SVN die Revision nummer).

Gruß
Karl Heinz Marbaise
 

PollerJava

Top Contributor
>> Wo soll ich bei obigem denn ${project.parent.version} nutzen ? Da die Version ja vererbt wird führt sich das sozusagen selbst ad absurdum...

Dann würde es aber auf jeden Fall sinn machen, wenn eine POM von einer Parent- POM "ableitet", dass man den Versions Tag weglassen könnte - das geht aber leider nicht, würde aber aus meiner Sicht sinn machen.

lg
 

kama

Top Contributor
Das Problem mit dem Weglassen der Version ist folgendes.

Wenn die Version da ist kann Maven feststellen, dass es aus dem aktuellen Reaktor stammte und nutzen...

Wenn ich jetzt die Version weglassen welche Version soll dann genommen werden? Ok. Man könnte annehmen, dass man einfach den Parent (sprich eine Verzeichnisebene höher) nimmt wenn einer da ist...

Da fällt man dann aber bei Aggregatoren auf die Nase...abgesehen davon gibt es durchaus fälle wo das dann eine andere Version sein muss...die dann aus dem Repository gezogen werden soll..bei Company POM's führt das dann wieder zu Problemen...

Die ideale Lösung ist das nicht...aber in Maven 4.X gibt es vielleicht eine bessere Lösung...

Gruß
Karl Heinz Marbaise
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Maven Parent und Child Poms - dependencies Tools - Maven, Gradle, Ant & mehr 1
B Maven: parent artifactId und child artifactId gleich Tools - Maven, Gradle, Ant & mehr 3
K Maven - Parent oder Dependency? Tools - Maven, Gradle, Ant & mehr 5
D [Maven Pluginentwicklung] - Plugin das nur auf Parent pom läuft Tools - Maven, Gradle, Ant & mehr 0
Oneixee5 Maven deploy - per SSH Tools - Maven, Gradle, Ant & mehr 6
H Maven kein Hauptmanifestattribut Tools - Maven, Gradle, Ant & mehr 10
M Programm mit Maven erstellen und starten samt Abhängigkeiten Tools - Maven, Gradle, Ant & mehr 27
D Interne Dependencies in Maven Tools - Maven, Gradle, Ant & mehr 51
J log4j2 mit Hibernate über Maven Tools - Maven, Gradle, Ant & mehr 10
thor_norsk Maven Build Failed: kann nicht von start.spring.io generiertes Projekt auf IntelliJ IDE starten Tools - Maven, Gradle, Ant & mehr 8
H Maven JUnit5 Tests werden ignoriert Tools - Maven, Gradle, Ant & mehr 5
thor_norsk Maven Tools - Maven, Gradle, Ant & mehr 32
ExceptionOfExpectation Maven Build Failed: kann nicht von start.spring.io generiertes Projekt auf Eclipse starten Tools - Maven, Gradle, Ant & mehr 20
Ich kann Maven nicht als UmgebungsVariable hinzufügen Tools - Maven, Gradle, Ant & mehr 2
F Maven JAR Plugin Probleme Tools - Maven, Gradle, Ant & mehr 4
W Was "braucht" man denn alles? Maven, Ant, Git, ... Tools - Maven, Gradle, Ant & mehr 21
N Fehler beim Imgui mit Maven Tools - Maven, Gradle, Ant & mehr 7
M Spring Boot Maven pom.xml-Eintrag Tools - Maven, Gradle, Ant & mehr 17
Encera JavaFX und Maven funktioniert nicht Tools - Maven, Gradle, Ant & mehr 1
B maven multi module Projekt und unnötige/zusätzliche Leerzeilen Tools - Maven, Gradle, Ant & mehr 4
J Maven Konfusion Tools - Maven, Gradle, Ant & mehr 7
Tippster Maven Sqlite integrieren (Eclipse, Maven) Tools - Maven, Gradle, Ant & mehr 4
T Image kreieren mit Maven bei JavaFX und nicht modularen Jars Tools - Maven, Gradle, Ant & mehr 12
T JSON Dependencies in Maven Tools - Maven, Gradle, Ant & mehr 7
T JavaFX, Jar über Maven kreieren Tools - Maven, Gradle, Ant & mehr 2
Encera Libraries Maven Projekt hinzufügen Tools - Maven, Gradle, Ant & mehr 9
Oneixee5 Maven Phase Tools - Maven, Gradle, Ant & mehr 3
Robertop maven copy-resources nicht in WAR Datei Tools - Maven, Gradle, Ant & mehr 2
T Maven: Probleme beim Einbinden der Dependencies Tools - Maven, Gradle, Ant & mehr 9
M Mit Maven eine jar Datei bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 1
M Mit Maven eine jar Datei Bauen ohne irgendeine main Methode Tools - Maven, Gradle, Ant & mehr 18
H Maven Maven: <mainClass>NAME?</mainClass> Tools - Maven, Gradle, Ant & mehr 13
H Maven maven-source-plugin is missing Tools - Maven, Gradle, Ant & mehr 5
M Missing Artifact on selbst gehostestes Maven Paket Tools - Maven, Gradle, Ant & mehr 8
M Error code 409 maven Tools - Maven, Gradle, Ant & mehr 5
M github + maven Fehler beim repository erstellen Tools - Maven, Gradle, Ant & mehr 1
M durch Maven wird "var" nicht gefunden Tools - Maven, Gradle, Ant & mehr 4
N Maven Intellij Maven Projekt erstell keine src Tools - Maven, Gradle, Ant & mehr 4
LimDul Maven Einzelne Unit Tests in Maven Builds skippen Tools - Maven, Gradle, Ant & mehr 3
M Maven jpackage-image wird nicht gefunden Tools - Maven, Gradle, Ant & mehr 22
M javafx wird in einem alten programm nicht bei maven gefunden Tools - Maven, Gradle, Ant & mehr 15
L Maven IntelliJ, Maven und JavaFX + SceneBuilder Tools - Maven, Gradle, Ant & mehr 23
von Spotz Maven und Spring: "Add to classpath" ? Tools - Maven, Gradle, Ant & mehr 29
Kirby.exe Projekt mit Maven kompilieren Tools - Maven, Gradle, Ant & mehr 13
P Maven Projekt Abhängigkeiten auf bekante Schwachstellen prüfen Tools - Maven, Gradle, Ant & mehr 4
H Maven dependency Problem ? Tools - Maven, Gradle, Ant & mehr 23
B Maven und Intellij Tools - Maven, Gradle, Ant & mehr 24
P Maven Test werden nicht ausgeführt . Junit . Maven . Surefire . Eclipse Tools - Maven, Gradle, Ant & mehr 12
yakazuqi Maven Eigene API mit Maven einbinden Tools - Maven, Gradle, Ant & mehr 1
M Was ist besser für den Anfang, Maven oder Gradle? Tools - Maven, Gradle, Ant & mehr 6
P Maven Wie die Maven Project version in JSP page verwenden? Tools - Maven, Gradle, Ant & mehr 2
C Maven Multi-Module Projekt Tools - Maven, Gradle, Ant & mehr 2
T Maven Warnings/Fehlermeldungen Tools - Maven, Gradle, Ant & mehr 12
T Maven und Datenbank(treiber) Tools - Maven, Gradle, Ant & mehr 13
T Maven Runnable Jar Tools - Maven, Gradle, Ant & mehr 5
T Grundlagen Maven und Git/Github Tools - Maven, Gradle, Ant & mehr 2
LimDul Maven Maven Surefire Plugin - Warnings upgrade Tools - Maven, Gradle, Ant & mehr 2
G Maven upload Tools - Maven, Gradle, Ant & mehr 0
B Maven Maven deploy Tools - Maven, Gradle, Ant & mehr 4
H Jenkins keine Tests gefunden - aber in Maven Tools - Maven, Gradle, Ant & mehr 30
P Mit Maven einen spezifischen Branch nach Tag-Parameter erstellen (in Jenkins-Job) Tools - Maven, Gradle, Ant & mehr 3
P Nur einen Teilbaum in Maven releasen? Tools - Maven, Gradle, Ant & mehr 7
D Cannot invoke "javafx.scene.control.MenuButton.getScene()" nach konvertierung zu maven Tools - Maven, Gradle, Ant & mehr 3
H Maven - keine Durchführung von Tests Tools - Maven, Gradle, Ant & mehr 12
H Jenkins - maven-jar-plugin - kein jar-file Tools - Maven, Gradle, Ant & mehr 38
P JavaFX jar mit Maven Tools - Maven, Gradle, Ant & mehr 9
P Maven & Intellij Modul kann nicht aufgelöst werden Tools - Maven, Gradle, Ant & mehr 12
H Eclipse JUnit erzeugt Fehler im Maven-Test Tools - Maven, Gradle, Ant & mehr 1
H Maven Anfängerproblem - No plugin found for prefix 'archetype' in the current project and in the plugin groups Tools - Maven, Gradle, Ant & mehr 25
sascha-sphw Maven vs Gradle Tools - Maven, Gradle, Ant & mehr 24
D Maven Maven und die Build-Geschwindigkeit Tools - Maven, Gradle, Ant & mehr 11
K Maven IntelliJ + Maven + JavaFX Tools - Maven, Gradle, Ant & mehr 2
J Maven Mit Maven eine ZIP Datei erstellen Tools - Maven, Gradle, Ant & mehr 0
K Maven install schlägt fehl Tools - Maven, Gradle, Ant & mehr 10
I Problem: Maven import extern Lib Tools - Maven, Gradle, Ant & mehr 3
Tom299 Maven Maven funktioniert nach Installation nicht Tools - Maven, Gradle, Ant & mehr 1
I Maven Interface hinzugefügt - Error Tools - Maven, Gradle, Ant & mehr 1
M Verständnisfrage Maven Tools - Maven, Gradle, Ant & mehr 2
S Maven installieren - "Befehl wurde nicht gefunden" Tools - Maven, Gradle, Ant & mehr 1
E Maven: Wie Abhängigkeiten analysieren? Tools - Maven, Gradle, Ant & mehr 0
E Maven Maven distributionManagement Vererbung in child POM Tools - Maven, Gradle, Ant & mehr 8
E Release Kandidaten mit Maven bauen Tools - Maven, Gradle, Ant & mehr 4
C Orderstruktur bei Libarys - Wie mit Ant oder Maven lösen? Tools - Maven, Gradle, Ant & mehr 0
G Maven, finde Dependency nicht... Tools - Maven, Gradle, Ant & mehr 2
G Maven Continious Integration mit Jenkins, Maven und Nexus - wie richtig? Tools - Maven, Gradle, Ant & mehr 1
reibi Maven Maven + Eclipse Tools - Maven, Gradle, Ant & mehr 0
P Maven add resource Tools - Maven, Gradle, Ant & mehr 0
S Maven Maven und Auflösen von JSF EL Tools - Maven, Gradle, Ant & mehr 5
H Maven HSQLDB in den Maven lifecycle einbinden Tools - Maven, Gradle, Ant & mehr 5
S Maven Unterschiedliche Deployments mit Maven Tools - Maven, Gradle, Ant & mehr 2
S Maven buildnumber-maven-plugin / Formatproblem mit timestamp Tools - Maven, Gradle, Ant & mehr 17
P Erzeugen von WebServices mit Maven und Eclipse (external Tool) Tools - Maven, Gradle, Ant & mehr 2
aze Maven downgraden von 3.x auf 2.09 unter Linux Tools - Maven, Gradle, Ant & mehr 4
Rudolf JSF und Maven mit Eclipse Tools - Maven, Gradle, Ant & mehr 5
M Maven-Dependency kann nicht gefunden werden Tools - Maven, Gradle, Ant & mehr 2
M Maven imports aus Modulen Tools - Maven, Gradle, Ant & mehr 4
P multimodul maven in SVN Tools - Maven, Gradle, Ant & mehr 3
D [Maven] neuerdings "No plugin found for prefix ..." errors Tools - Maven, Gradle, Ant & mehr 7
C Automatisches Deployen in ein externes Maven Repository. Tools - Maven, Gradle, Ant & mehr 5
D JUnit Test in Maven fail und in Eclipse erolgreich Tools - Maven, Gradle, Ant & mehr 4

Ähnliche Java Themen

Neue Themen


Oben