Nicht lösen ${project.version} in Kind pom.xml von den Eltern pom.xml
Habe ich ein Projekt-Hierarchie als :
A - pom.xml
|__ B - pom.xml
|__ C - pom.xml
Eigentum project.version
definiert ist pom.xml definiert in A. Anderen zwei pom - geben Sie den Eltern-tag und die entsprechende relative Pfad zu der jeweiligen übergeordneten pom.
<parent>
<groupId>com.GRP.id</groupId>
<artifactId>ARTIFACT_ID</artifactId>
<version>${project.version}</version>
<relativePath>../pom.xml</relativePath>
</parent>
Hier das Problem ist, dass maven nicht in der Lage zu beheben ${project.version} und ist mit es wie es ist. Dies wirft folgende exception beim ausführen von A/B/C:
[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for com.project_name.module_name:sub_module_name:[unknown-version]: Could not transfer artifact com.project_name.module_name:module_name:pom:${project.version} from
to env-module_name-all-repos (REPO_URL): Illegal character in path at index 96: https://DEMO
/artifactory/env-module_name-all-repos/com/project_name/module_name/module_name/${project.version}/module_name-${project.version}.pom and 'parent.relativePath' points at wrong
local POM @ com.project_name.module_name:sub_module_name:[unknown-version], C:\WorkSpaces\Repository\sub_module_name\pom.xml, line 10, column 10
Jede Anregung, wie den gleichen Zugang von child-POMs.
InformationsquelleAutor gaurs | 2014-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Sumit,
Maven untersucht die
<parent>
block und den darin enthaltenengroupId
,artifactId
, undversion
bevor das Projekt in die eigenegroupId
,artifactId
undversion
.So sollten Sie vermeiden alles, was aussieht wie
${...}
innerhalb der<parent>
block. Die umgekehrte situation ist OK aber: Eltern können die Eigenschaften verwiesen werden, die an anderer Stelle in der pom-Datei:Denken Sie an es auf diese Weise: wenn Sie einen Sohn oder eine Tochter, die Sie wählen könnten, Sie zu benennen, nach selbst - aber es würde keinen Sinn machen, zu Namen Sie nach Ihr Kind, da Sie ins Dasein kamen erste!
Hoffe, das hilft.
EDIT:
Schauen wir uns dein Beispiel pom wieder:
So, in Ihrem Kind die pom.xml Datei, die
<parent>
block enthält einen Verweis auf die${project.version}
. Aber wie oben schon erwähnt, ist dieser Wert noch nicht existiert, da die<parent>
block ist die erste Sache, die wir Auswertung.Wenn Sie es ändern, wie folgt, die Dinge werden in Ordnung sein:
EDIT 2
Eine Letzte bisschen info.
Denken Sie daran, wenn Sie anfangs
mvn compile
auf der Befehlszeile, die Sie ausführen möchten aus dem Verzeichnis des child-pom.Maven weiß noch nicht, wo die pom.xml Datei des übergeordneten.
Er die
<parent>
block, um herauszufinden, wo die pom-Datei ist, nur dann kann es Lesen, den Inhalt der Datei.Hoffe, dass klärt die Dinge.
${parent.version}
im übergeordneten block als die gleiche ist eindeutig die version erwähnt, die in der übergeordneten pom.xml?siehe edit zu meiner obigen Antwort.
Dank 333kenshin. Nur noch eine Frage, gibt es irgendeinen workaround zu überspringen
<version>1.0-SNAPSHOT</version>
im übergeordneten block Kind pom.xml. Uns ist ein riesiges Projekt, so wird es sehr schwierig, aktualisieren Sie die version, die in jedem pom.xml jedes mal, wenn ein neues release ist in Arbeit.Leider nicht, die Eltern.version ist notwendig, um richtig zu identifizieren, die Eltern. Auf der anderen Seite, das PROJEKT selbst muss nicht erklären - version-wenn Sie es leer lassen, es werden Erben, was die Eltern, die den Wert enthält.
Eigentlich, wenn ich überspringen Sie die <version> - tag oder lassen Sie es leer (<version><version>) im übergeordneten block dann in beiden Fällen werden seine nicht in der Lage zu kompilieren und gibt die folgende Ausnahme:
[FATAL] 'parent.version' is missing. @ line 13, column 12
InformationsquelleAutor 333kenshin
Ich würde gerne meine Arbeit herum, ich war mit maven 3.5.2
Ausführen einer mvn-Versionen:legen Sie die update-die version der Eltern und die Versionen der übergeordneten in die untergeordneten Module.
Bauen Sie das Aggregat pom oder parent-pom, die aufbauen sollte, alle untergeordneten Module
Wenn Sie ein lokales repository oder einem nexus-repository schieben Sie die änderungen mit den aktualisierten Versionen.
Nun alle untergeordneten Module haben eine Feste Eltern-version, bei der die in Schritt 1 können wir mit der Kinder-Module als Abhängigkeit, die über mehrere Projekte.
InformationsquelleAutor sethu
Maven erlaubt, Sie zu verwenden " ${project.version} in der child-POM. Es bezieht sich einfach auf die Eltern-version, die es finden kann durch suchen des übergeordneten POM, geben Sie mithilfe der relativePath tag.
Tun, Sie geschehen zu sein mit Jenkins? Wenn ja, dies ist ein bekanntes Problem in Jenkins. Werfen Sie einen Blick auf diese: https://issues.jenkins-ci.org/browse/JENKINS-23846
Wenn nicht, welche version von Maven verwenden Sie?
Auf eine unabhängige Seite Hinweis: der Standardwert für die relativePath ist ../pom.xml so brauchen Sie nicht explizit angeben, dass (wie dein Beispiel-POM tut), wenn Sie das Projekt folgt dem standard multi-Modul-Struktur.
InformationsquelleAutor neesh