Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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 ...om:${project.parent.version} from/to central (404 Not Found
Illegal character in path at index 99: ... and 'parent.relativePath' points at wrong local POM
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.
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.
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:
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?
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.
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?
>> 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.
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...