diff --git a/lib/manager/maven/extract.ts b/lib/manager/maven/extract.ts index bf535024ef3f3f271b26f97fcd26b83943e4a070..bfd5057152de72ae07dda40d0ba346cc9f959fd0 100644 --- a/lib/manager/maven/extract.ts +++ b/lib/manager/maven/extract.ts @@ -179,8 +179,9 @@ export function extractPackage(rawContent: string, packageFile: string = null) { }); } - const parentPath = project.valueWithPath('parent.relativePath'); - if (parentPath) { + if (packageFile && project.childNamed('parent')) { + const parentPath = + project.valueWithPath('parent.relativePath') || '../pom.xml'; result.parent = resolveParentFile(packageFile, parentPath); } @@ -204,10 +205,16 @@ export function resolveProps(packages: PackageFile[]): PackageFile[] { // which allows inheritance/overriding. packageFileNames.forEach(name => { const hierarchy: Record<string, MavenProp>[] = []; + const alreadyExtracted: Record<string, boolean> = {}; let pkg = extractedPackages[name]; while (pkg) { hierarchy.unshift(pkg.mavenProps); - pkg = extractedPackages[pkg.parent]; + if (pkg.parent && !alreadyExtracted[pkg.parent]) { + alreadyExtracted[pkg.parent] = true; + pkg = extractedPackages[pkg.parent]; + } else { + pkg = null; + } } hierarchy.unshift({}); // @ts-ignore diff --git a/test/manager/maven/__snapshots__/index.spec.ts.snap b/test/manager/maven/__snapshots__/index.spec.ts.snap index c9dc7c465501603a453e3d991c622b8a420cf856..0c5c78c660ec923a5885794635f4aeb4787efdb0 100644 --- a/test/manager/maven/__snapshots__/index.spec.ts.snap +++ b/test/manager/maven/__snapshots__/index.spec.ts.snap @@ -143,6 +143,7 @@ Array [ }, ], "packageFile": "random.pom.xml", + "parent": "../pom.xml", }, ] `; diff --git a/test/manager/maven/_fixtures/parent.pom.xml b/test/manager/maven/_fixtures/parent.pom.xml index 2da5281232024cf6244b1563d5acda7a5fe67be8..aea9626f8e448990447856bf0edcc0d745bde1fb 100644 --- a/test/manager/maven/_fixtures/parent.pom.xml +++ b/test/manager/maven/_fixtures/parent.pom.xml @@ -1,5 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"> + <parent> + <groupId>org.example</groupId> + <artifactId>child</artifactId> + <version>42</version> + <relativePath>child.pom.xml</relativePath> + </parent> + <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>ExamplePomParent</artifactId>