Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

@Value
Expand Down Expand Up @@ -88,10 +89,7 @@ public Xml.Document visitDocument(Xml.Document document, ExecutionContext ctx) {
Xml.Document d = super.visitDocument(document, ctx);

// Return early if the parent appears to be within the current repository, as properties defined there will be updated
if (d.getRoot().getChild("parent")
.flatMap(parent -> parent.getChild("relativePath"))
.flatMap(Xml.Tag::getValue)
.isPresent()) {
if (isLocalParent(d)) {
return d;
}

Expand Down Expand Up @@ -142,6 +140,20 @@ public Xml.Tag visitTag(Xml.Tag tag, ExecutionContext ctx) {
}
return t;
}

private boolean isLocalParent(Xml.Document d) {
Optional<Xml.Tag> relativePath = d.getRoot().getChild("parent")
.flatMap(parent -> parent.getChild("relativePath"));
if (relativePath.flatMap(Xml.Tag::getValue).isPresent()) {
// specified explicitly: `<relativePath>../../pom.xml<relativePath>>`
return true;
} else {
// no relative path, maven default is used, potentially `../pom.xml`
// but parent exists, so not root `pom.xml`
return !relativePath.isPresent() && getResolutionResult().getParent() != null;
}

}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,68 @@ void overrideRemoteParent() {
);
}

@Test
void doNotOverrideLocalParent() {
rewriteRun(
//language=xml
pomXml(
"""
<project>
<groupId>com.example</groupId>
<artifactId>example-parent</artifactId>
<version>1.0.0</version>
<modelVersion>4.0</modelVersion>
<properties>
<java.version>11</java.version>
<jdk.version>11</jdk.version>
<javaVersion>11</javaVersion>
<jdkVersion>11</jdkVersion>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.release>11</maven.compiler.release>
<release.version>11</release.version>
</properties>
</project>
""",
"""
<project>
<groupId>com.example</groupId>
<artifactId>example-parent</artifactId>
<version>1.0.0</version>
<modelVersion>4.0</modelVersion>
<properties>
<java.version>17</java.version>
<jdk.version>17</jdk.version>
<javaVersion>17</javaVersion>
<jdkVersion>17</jdkVersion>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.release>17</maven.compiler.release>
<release.version>17</release.version>
</properties>
</project>
"""),
mavenProject("example-child",
//language=xml
pomXml(
"""
<project>
<parent>
<groupId>com.example</groupId>
<artifactId>example-parent</artifactId>
<version>1.0.0</version>
</parent>
<groupId>com.example</groupId>
<artifactId>example-child</artifactId>
<version>1.0.0</version>
<modelVersion>4.0</modelVersion>
</project>
"""
)
)
);
}

@Test
void doNothingForExplicitPluginConfiguration() {
// Use UseMavenCompilerPluginReleaseConfiguration for this case
Expand Down