From 4126bc3946424acf4b8f5b0b1ef75a3c1b7e9fac Mon Sep 17 00:00:00 2001 From: marcel-gepardec Date: Wed, 4 Sep 2024 16:15:14 +0200 Subject: [PATCH] added the ability to process a project with modules in modules where the parent version is a property --- .../maven/internal/MavenPomDownloader.java | 21 +++- .../internal/MavenPomDownloaderTest.java | 108 ++++++++++++++++++ 2 files changed, 126 insertions(+), 3 deletions(-) diff --git a/rewrite-maven/src/main/java/org/openrewrite/maven/internal/MavenPomDownloader.java b/rewrite-maven/src/main/java/org/openrewrite/maven/internal/MavenPomDownloader.java index ba2eb96e64f..a94c04caafe 100644 --- a/rewrite-maven/src/main/java/org/openrewrite/maven/internal/MavenPomDownloader.java +++ b/rewrite-maven/src/main/java/org/openrewrite/maven/internal/MavenPomDownloader.java @@ -490,9 +490,24 @@ public Pom download(GroupArtifactVersion gav, // The requested gav might itself have an unresolved placeholder in the version, so also check raw values for (Pom projectPom : projectPoms.values()) { if (gav.getGroupId().equals(projectPom.getGroupId()) && - gav.getArtifactId().equals(projectPom.getArtifactId()) && - (gav.getVersion().equals(projectPom.getVersion()) || projectPom.getVersion().equals(projectPom.getValue(gav.getVersion())))) { - return projectPom; + gav.getArtifactId().equals(projectPom.getArtifactId())){ + if (gav.getVersion().equals(projectPom.getVersion()) || projectPom.getVersion().equals(projectPom.getValue(gav.getVersion()))) { + return projectPom; + } + Parent parent = projectPom.getParent(); + while (parent != null){ + for (Pom project : projectPoms.values()) { + if (parent.getGroupId().equals(project.getGroupId()) && parent.getArtifactId().equals(project.getArtifactId())){ + if (projectPom.getVersion().equals(project.getValue(gav.getVersion()))){ + return projectPom; + } + parent = project.getParent(); + if (parent == null){ + break; + } + } + } + } } } diff --git a/rewrite-maven/src/test/java/org/openrewrite/maven/internal/MavenPomDownloaderTest.java b/rewrite-maven/src/test/java/org/openrewrite/maven/internal/MavenPomDownloaderTest.java index 2663320a74b..8c7c93a3b87 100755 --- a/rewrite-maven/src/test/java/org/openrewrite/maven/internal/MavenPomDownloaderTest.java +++ b/rewrite-maven/src/test/java/org/openrewrite/maven/internal/MavenPomDownloaderTest.java @@ -777,4 +777,112 @@ private static GroupArtifactVersion createArtifact(Path repository) throws IOExc return new GroupArtifactVersion("org.openrewrite", "rewrite", "1.0.0"); } + @Test + void shouldNotThrowExceptionForModulesInModulesWithRightProperty() { + var gav = new GroupArtifactVersion("test", "test2", "${test}"); + + Path pomPath = Paths.get("test/test2/pom.xml"); + Pom pom = Pom.builder() + .sourcePath(pomPath) + .repository(MAVEN_CENTRAL) + .properties(singletonMap("REPO_URL", MAVEN_CENTRAL.getUri())) + .parent(new Parent(new GroupArtifactVersion("test", "test", "${test}"), "../pom.xml")) + .gav(new ResolvedGroupArtifactVersion( + "${REPO_URL}", "test", "test2", "7.0.0", null)) + .build(); + + ResolvedPom resolvedPom = ResolvedPom.builder() + .requested(pom) + .properties(singletonMap("REPO_URL", MAVEN_CENTRAL.getUri())) + .repositories(singletonList(MAVEN_CENTRAL)) + .build(); + + Path pomPath2 = Paths.get("test/pom.xml"); + Pom pom2 = Pom.builder() + .sourcePath(pomPath) + .repository(MAVEN_CENTRAL) + .properties(singletonMap("REPO_URL", MAVEN_CENTRAL.getUri())) + .parent(new Parent(new GroupArtifactVersion("test", "root-test", "${test}"), "../pom.xml")) + .gav(new ResolvedGroupArtifactVersion( + "${REPO_URL}", "test", "test", "7.0.0", null)) + .build(); + + + Path parentPomPath = Paths.get("pom.xml"); + Pom parentPom = Pom.builder() + .sourcePath(parentPomPath) + .repository(MAVEN_CENTRAL) + .properties(singletonMap("test", "7.0.0")) + .parent(null) + .gav(new ResolvedGroupArtifactVersion( + "${REPO_URL}", "test", "root-test", "7.0.0", null)) + .build(); + + Map pomsByPath = new HashMap<>(); + pomsByPath.put(parentPomPath, parentPom); + pomsByPath.put(pomPath, pom); + pomsByPath.put(pomPath2, pom2); + + String httpUrl = "http://%s.com".formatted(UUID.randomUUID()); + MavenRepository nonexistentRepo = new MavenRepository("repo", httpUrl, null, null, false, null, null, null, null); + + MavenPomDownloader downloader = new MavenPomDownloader(pomsByPath, ctx); + + assertDoesNotThrow(() -> downloader.download(gav, Objects.requireNonNull(pom.getParent()).getRelativePath(), resolvedPom, singletonList(nonexistentRepo))); + } + + @Test + void shouldThrowExceptionForModulesInModulesWithNoRightProperty() { + var gav = new GroupArtifactVersion("test", "test2", "${test}"); + + Path pomPath = Paths.get("test/test2/pom.xml"); + Pom pom = Pom.builder() + .sourcePath(pomPath) + .repository(MAVEN_CENTRAL) + .properties(singletonMap("REPO_URL", MAVEN_CENTRAL.getUri())) + .parent(new Parent(new GroupArtifactVersion("test", "test", "${test}"), "../pom.xml")) + .gav(new ResolvedGroupArtifactVersion( + "${REPO_URL}", "test", "test2", "7.0.0", null)) + .build(); + + ResolvedPom resolvedPom = ResolvedPom.builder() + .requested(pom) + .properties(singletonMap("REPO_URL", MAVEN_CENTRAL.getUri())) + .repositories(singletonList(MAVEN_CENTRAL)) + .build(); + + Path pomPath2 = Paths.get("test/pom.xml"); + Pom pom2 = Pom.builder() + .sourcePath(pomPath) + .repository(MAVEN_CENTRAL) + .properties(singletonMap("REPO_URL", MAVEN_CENTRAL.getUri())) + .parent(new Parent(new GroupArtifactVersion("test", "root-test", "${test}"), "../pom.xml")) + .gav(new ResolvedGroupArtifactVersion( + "${REPO_URL}", "test", "test", "7.0.0", null)) + .build(); + + + Path parentPomPath = Paths.get("pom.xml"); + Pom parentPom = Pom.builder() + .sourcePath(parentPomPath) + .repository(MAVEN_CENTRAL) + .properties(singletonMap("tt", "7.0.0")) + .parent(null) + .gav(new ResolvedGroupArtifactVersion( + "${REPO_URL}", "test", "root-test", "7.0.0", null)) + .build(); + + Map pomsByPath = new HashMap<>(); + pomsByPath.put(parentPomPath, parentPom); + pomsByPath.put(pomPath, pom); + pomsByPath.put(pomPath2, pom2); + + String httpUrl = "http://%s.com".formatted(UUID.randomUUID()); + MavenRepository nonexistentRepo = new MavenRepository("repo", httpUrl, null, null, false, null, null, null, null); + + MavenPomDownloader downloader = new MavenPomDownloader(pomsByPath, ctx); + + assertThrows(IllegalArgumentException.class, () -> downloader.download(gav, Objects.requireNonNull(pom.getParent()).getRelativePath(), resolvedPom, singletonList(nonexistentRepo))); + } + }