Maven nicht auflösen, local parent-POM
Dies ist ein Interessantes problem, und ich kann nicht sagen, wenn ich mache etwas falsch oder es ist eine Beschränkung von Maven.
Die einfachste version des Szenarios ist, dass es ein parent-POM, single Kind POM, und eine POM aggregation. Die aggregation POM ist lediglich die Kette der Module zusammen.
Wenn ich installieren Sie die aggregation POM, es nicht herauszufinden, die Abhängigkeiten des Kindes POM an das parent POM. Ich würde es vorziehen, nicht zu haben, einen relativen Pfad und sollte möglich sein, aus meinem Verständnis von Maven Artefakten.
Jede Einsicht würde sehr geschätzt werden. Danke.
Dies ist die uber Elternteil (never mind, dass da nichts ist)
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>my.group</groupId>
<artifactId>parent-uber</artifactId>
<version>0.0.2-SNAPSHOT</version>
<packaging>pom</packaging>
</project>
Dies ist das Kind:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>my.group</groupId>
<artifactId>parent-uber</artifactId>
<version>0.0.2-SNAPSHOT</version>
</parent>
<groupId>my.group</groupId>
<artifactId>parent-java</artifactId>
<packaging>pom</packaging>
<properties>
</properties>
<build>
<!-- To define the plugin version in your parent POM -->
<pluginManagement>
<plugins>
<!-- All projects that extend this should have valid JavaDoc built-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Sowie für die Vollständigkeit der aggregator:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>my.group</groupId>
<artifactId>_maven-integration-aggregator</artifactId>
<version>0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <!-- parent aggregator -->
</parent>
<groupId>my.group.maven</groupId>
<artifactId>_poms-aggregator</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>parent-uber</module>
<module>parent-java</module>
</modules>
</project>
Den Fehler:
org.apache.maven.model.resolution.UnresolvableModelException: Could not find artifact my.group:parent-uber:pom:0.0.2-SNAPSHOT
at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:159)
at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:817)
at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:669)
at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:307)
at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:411)
at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:380)
at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:496)
at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:380)
at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:344)
at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:637)
at org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:586)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:229)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not find artifact my.group:parent-uber:pom:0.0.2-SNAPSHOT
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:295)
at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:155)
... 23 more
Caused by: org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact my.parent:parent-uber:pom:0.0.2-SNAPSHOT
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:449)
... 27 more
Versuchen Sie, das Kind
<module>parent-java</module>
. Ich denke, Maven wird noch Folgen Sie es über die Eltern-uberDas Ziel ist es, beide aufgeführt im aggregator und maven zu verstehen, die Abhängigkeit auf die Eltern-uber. Also Nein, ich konnte nicht installieren Sie die Super-Eltern. Ich installieren möchte sowohl Eltern -, uber-und parent-java zur gleichen Zeit oder zumindest automatisch für meine super-root-aggregator (nicht gezeigt)
Ihre Eltern stehen auf der Standard-Position in Bezug auf Ihr Kind? Ansonsten, versuchen Sie, ein relativePath für die Eltern in Ihr Kind pom.
Dies kann eine Möglichkeit sein, aber ich hatte gehofft, dass Maven war klug genug, um herauszufinden, die Abhängigkeiten automatisch ohne hardcoding einen relativen Pfad.
InformationsquelleAutor Thomas Beauvais | 2013-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösen können Sie dieses problem durch die Zugabe von speziellen Profil für den Aufbau nur Eltern.
In Ihrem Kind pom add
<relativePath />
zu den<parent>
tag. Dann ändern aggregator.Aggregator pom:
Und verwenden Sie es zum ausführen von build -, zweimal, so:
Erste Befehl installiert parent pom zu lokalen repo, also der zweite Befehl wird nicht scheitern.
Aber diese Lösung funktioniert nur, wenn ein Elternteil Projekt hat die gleiche version wie die, die Kind braucht. Aber lassen Sie uns sagen, Sie haben version 1.0 veröffentlicht Elternteil und nun arbeiten Eltern mit 1.1-SNAPSHOT-version, aber Kind verwendet wird die version 1.0 veröffentlicht. Wenn Sie jetzt löschen Sie Ihre lokale repo, oder jemand anderes Klonen Sie Ihre Projekt -, Bau mit
-Pprepare
arbeiten nicht, wie Sie diese installierenparent-uber:1.1-SNAPSHOT
und Kind noch nicht aufgelöste Abhängigkeit.Damit dies funktioniert, müssen Sie ein externes repository (nexus, artifactory, etc), in die Sie veröffentlicht haben
parent-uber:1.0
und du wirst dieses repo in<repositories>
tag in child pom.Wenn es gibt eine Menge von untergeordneten Projekten ist es oft eine gute Idee, um gemeinsame Einstellungen, die in übergeordnete pom, zur Vermeidung einer doppelten code. Als repository-gemeinsam ist allen Projekten, möchten Sie vielleicht, um es in Elternteil. Aber dann, wenn Sie nicht über Eltern, die lokal installiert und versucht zu installieren, Kind, dann ist maven nicht weiß, welches repository es sollte zum download die Eltern. Um dieses problem zu vermeiden, können Sie Profil hinzufügen, die für dieses repository in
.m2/settings.xml
und Beratung alle Ihre team-Mitglieder das gleiche zu tun.InformationsquelleAutor bartnikiewi.cz
Ich weiß nicht, ob dies die Lösung für dein problem, aber:
Wenn Sie eine parent-pom von maven standardmäßig wird vorausgesetzt, dass er sich in den übergeordneten Ordner. Ist dies nicht der Fall sein, so haben Sie entweder neu definieren Sie den relativen Pfad in den übergeordneten Abschnitt in Ihrem Mutter-java-zu-Punkt zu
../parent-uber
, und die pom wird lokal aufgelöst werden, oder als<relativePath />
, und es wird aus der Ferne behoben werden.Ich verstehe, dass mein Kommentar verbindet zwei Themen. Also ich werde das klären. Ich möchte einfach wissen, ob es eine Möglichkeit zur Lösung des POM-Struktur ohne harte Codierung der relativen Pfade. Maven hat die Informationen, die Sie zum beheben dieses in der repo ist es aber nicht.
Haben Sie versucht, mit
<relativePath />
in Ihre übergeordnete Erklärung?Die Idee ist, dass ich möchte, um eine Reihe von parent-POMs als leicht erweiterbar, um die notwendigen Abhängigkeiten und die plugin-Erklärungen standardmäßig. So, es mat nicht da, um eine <relativePath/> leer oder sonst. Wenn es funktioniert, können Sie bitte erklären, ein wenig mehr, so dass ich könnte versuchen und zu verstehen, das Ergebnis?
InformationsquelleAutor diegomtassis
In meinem Fall die parent pom version definiert wurde, nicht die gleichen wie die, die ich erwähnt in der child-pom und daher der Fehler. Es begann wunderbar funktioniert, sobald ich die korrigierte version auf meine Eltern pom.xml -
Kind pom-Eintrag sah aus wie
InformationsquelleAutor Gautam
Gemäß dieser Leitlinie, scheint Elternteil Abhängigkeit ist NICHT automatisch analysiert werden, die von maven multi-Module-Reaktor. Da KEINE übergeordnete Abhängigkeit ist aufgeführt in der Liste.
Und ich überprüft maven in der Tat bestimmt die build-Reihenfolge durch die Analyse der dependency graph, definiert durch tags, zwischen Submodule .
InformationsquelleAutor Popeye
Nun, ich habe das in einer anderen Art und Weise.
In meinem Fall wollte ich eine "Eltern" - das ist ein "aggregator" zu.
So, ich habe mein Projekt "Eltern + aggregator".
Dies ist ein Schnitt von pom.xml mein Projekt "Eltern + aggregator":
Danach änderte ich die "testprojectejb" verweisen auf das "Eltern-testproject".
So, wenn ich den Bau des "testproject" (Eltern-testproject), dann werden alle Projekte bauen, einschließlich der Eltern.
Ich hoffe, es ist nützlich.
InformationsquelleAutor Cezar Oliveira