Skip to content

Commit 79f4756

Browse files
committed
[MNG-8340] Resolve parent according to the exact model location
1 parent 4e1152f commit 79f4756

File tree

3 files changed

+15
-67
lines changed

3 files changed

+15
-67
lines changed

impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomArtifactTransformer.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,16 @@ TransformedArtifact createConsumerPomArtifact(
114114
void transform(MavenProject project, RepositorySystemSession session, Path src, Path tgt)
115115
throws ModelBuildingException, XMLStreamException, IOException {
116116
Model model = builder.build(session, project, src);
117+
if (model.getParent() != null) {
118+
String rel = model.getParent().getRelativePath();
119+
if (rel == null) {
120+
rel = "..";
121+
}
122+
if (!rel.isEmpty()) {
123+
String newRel = tgt.relativize(src.resolve(src)).toString();
124+
model = model.withParent(model.getParent().withRelativePath(newRel));
125+
}
126+
}
117127
write(model, tgt);
118128
}
119129

impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java

Lines changed: 1 addition & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,9 @@
2121
import javax.inject.Inject;
2222
import javax.inject.Named;
2323

24-
import java.io.File;
25-
import java.io.IOException;
26-
import java.io.InputStream;
27-
import java.nio.file.Files;
2824
import java.nio.file.Path;
2925
import java.util.ArrayList;
3026
import java.util.List;
31-
import java.util.Objects;
3227
import java.util.stream.Collectors;
3328

3429
import org.apache.maven.api.SessionData;
@@ -44,7 +39,6 @@
4439
import org.apache.maven.api.services.ModelBuilderRequest;
4540
import org.apache.maven.api.services.ModelBuilderResult;
4641
import org.apache.maven.api.services.ModelSource;
47-
import org.apache.maven.api.services.Source;
4842
import org.apache.maven.api.services.model.LifecycleBindingsInjector;
4943
import org.apache.maven.internal.impl.InternalSession;
5044
import org.apache.maven.model.v4.MavenModelVersion;
@@ -97,8 +91,7 @@ private ModelBuilderResult buildModel(RepositorySystemSession session, MavenProj
9791
ModelBuilderRequest.ModelBuilderRequestBuilder request = ModelBuilderRequest.builder();
9892
request.requestType(ModelBuilderRequest.RequestType.CONSUMER_POM);
9993
request.session(iSession);
100-
// in order to resolve parents, we need to fake being at the correct location
101-
request.source(new PomConsumerModelSource(project.getModel().getPomPath(), src));
94+
request.source(ModelSource.fromPath(src));
10295
request.locationTracking(false);
10396
request.systemProperties(session.getSystemProperties());
10497
request.userProperties(session.getUserProperties());
@@ -208,63 +201,4 @@ private static List<Repository> pruneRepositories(List<Repository> repositories)
208201
.filter(r -> !org.apache.maven.api.Repository.CENTRAL_ID.equals(r.getId()))
209202
.collect(Collectors.toList());
210203
}
211-
212-
static class PomConsumerModelSource implements ModelSource {
213-
final Path path;
214-
final Path src;
215-
216-
PomConsumerModelSource(Path path, Path src) {
217-
this.path = path;
218-
this.src = src;
219-
}
220-
221-
@Override
222-
public Path getPath() {
223-
return path;
224-
}
225-
226-
@Override
227-
public InputStream openStream() throws IOException {
228-
return Files.newInputStream(src);
229-
}
230-
231-
@Override
232-
public String getLocation() {
233-
return src.toString();
234-
}
235-
236-
@Override
237-
public Source resolve(String relative) {
238-
return ModelSource.fromPath(path.resolve(relative));
239-
}
240-
241-
@Override
242-
public ModelSource resolve(ModelLocator locator, String relative) {
243-
String norm = relative.replace('\\', File.separatorChar).replace('/', File.separatorChar);
244-
Path path = getPath().getParent().resolve(norm);
245-
Path relatedPom = locator.locateExistingPom(path);
246-
if (relatedPom != null) {
247-
return ModelSource.fromPath(relatedPom);
248-
}
249-
return null;
250-
}
251-
252-
@Override
253-
public boolean equals(Object o) {
254-
return this == o
255-
|| o.getClass() == getClass()
256-
&& Objects.equals(path, ((PomConsumerModelSource) o).path)
257-
&& Objects.equals(src, ((PomConsumerModelSource) o).src);
258-
}
259-
260-
@Override
261-
public int hashCode() {
262-
return Objects.hash(path, src);
263-
}
264-
265-
@Override
266-
public String toString() {
267-
return "PomConsumerModelSource[" + "path=" + path + ']';
268-
}
269-
}
270204
}

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultModelBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,8 +1169,12 @@ private Model readEffectiveModel() throws ModelBuilderException {
11691169
relPath = inputModel
11701170
.getPomFile()
11711171
.getParent()
1172+
.toAbsolutePath()
11721173
.relativize(parentModel.getPomFile().getParent())
11731174
.toString();
1175+
if (relPath.equals("..")) {
1176+
relPath = null;
1177+
}
11741178
} else {
11751179
relPath = "..";
11761180
}

0 commit comments

Comments
 (0)