diff --git a/lib/manager/maven/extract.ts b/lib/manager/maven/extract.ts
index bfd5057152de72ae07dda40d0ba346cc9f959fd0..888c17947cc9236b03d4cf37ff733530655da991 100644
--- a/lib/manager/maven/extract.ts
+++ b/lib/manager/maven/extract.ts
@@ -39,13 +39,11 @@ function depFromNode(node: XmlElement): PackageDependency {
     const versionNode = node.descendantWithPath('version');
     const fileReplacePosition = versionNode.position;
     const datasource = 'maven';
-    const registryUrls = [DEFAULT_MAVEN_REPO];
     return {
       datasource,
       depName,
       currentValue,
       fileReplacePosition,
-      registryUrls,
     };
   }
   return null;
@@ -165,18 +163,14 @@ export function extractPackage(rawContent: string, packageFile: string = null) {
 
   const repositories = project.childNamed('repositories');
   if (repositories && repositories.children) {
-    const repoUrls = [];
+    const repoUrls = [DEFAULT_MAVEN_REPO];
     for (const repo of repositories.childrenNamed('repository')) {
       const repoUrl = repo.valueWithPath('url');
       if (repoUrl) {
         repoUrls.push(repoUrl);
       }
     }
-    result.deps.forEach(dep => {
-      if (dep.registryUrls) {
-        repoUrls.forEach(url => dep.registryUrls.push(url));
-      }
-    });
+    result.registryUrls = repoUrls;
   }
 
   if (packageFile && project.childNamed('parent')) {
@@ -188,11 +182,12 @@ export function extractPackage(rawContent: string, packageFile: string = null) {
   return result;
 }
 
-export function resolveProps(packages: PackageFile[]): PackageFile[] {
+export function resolveParents(packages: PackageFile[]): PackageFile[] {
   const packageFileNames: string[] = [];
   const extractedPackages: Record<string, PackageFile> = {};
   const extractedDeps: Record<string, PackageDependency[]> = {};
   const extractedProps: Record<string, MavenProp> = {};
+  const registryUrls: Record<string, Set<string>> = {};
   packages.forEach(pkg => {
     const name = pkg.packageFile;
     packageFileNames.push(name);
@@ -204,21 +199,39 @@ export function resolveProps(packages: PackageFile[]): PackageFile[] {
   // and merge them in reverse order,
   // which allows inheritance/overriding.
   packageFileNames.forEach(name => {
-    const hierarchy: Record<string, MavenProp>[] = [];
-    const alreadyExtracted: Record<string, boolean> = {};
+    registryUrls[name] = new Set();
+    const propsHierarchy: Record<string, MavenProp>[] = [];
+    const visitedPackages: Set<string> = new Set();
     let pkg = extractedPackages[name];
     while (pkg) {
-      hierarchy.unshift(pkg.mavenProps);
-      if (pkg.parent && !alreadyExtracted[pkg.parent]) {
-        alreadyExtracted[pkg.parent] = true;
+      propsHierarchy.unshift(pkg.mavenProps);
+
+      if (pkg.registryUrls) {
+        pkg.registryUrls.forEach(url => {
+          registryUrls[name].add(url);
+        });
+      }
+
+      if (pkg.parent && !visitedPackages.has(pkg.parent)) {
+        visitedPackages.add(pkg.parent);
         pkg = extractedPackages[pkg.parent];
       } else {
         pkg = null;
       }
     }
-    hierarchy.unshift({});
+    propsHierarchy.unshift({});
     // @ts-ignore
-    extractedProps[name] = Object.assign.apply(null, hierarchy);
+    extractedProps[name] = Object.assign.apply(null, propsHierarchy);
+  });
+
+  // Resolve registryUrls
+  packageFileNames.forEach(name => {
+    const pkg = extractedPackages[name];
+    const urls = [...registryUrls[name]];
+    pkg.deps.forEach(rawDep => {
+      rawDep.registryUrls = urls; // eslint-disable-line no-param-reassign
+    });
+    delete pkg.registryUrls;
   });
 
   // Resolve placeholders
@@ -265,6 +278,5 @@ export async function extractAllPackageFiles(
       logger.info({ packageFile }, 'packageFile has no content');
     }
   }
-
-  return cleanResult(resolveProps(packages));
+  return cleanResult(resolveParents(packages));
 }
diff --git a/test/manager/maven/__snapshots__/extract.spec.ts.snap b/test/manager/maven/__snapshots__/extract.spec.ts.snap
index 601c732451fc11802c0837f6a4d3083fc71af5e2..60b96c15f169d5b5e23c2f517287f6ef69c0361e 100644
--- a/test/manager/maven/__snapshots__/extract.spec.ts.snap
+++ b/test/manager/maven/__snapshots__/extract.spec.ts.snap
@@ -9,130 +9,78 @@ Object {
       "datasource": "maven",
       "depName": "org.example:parent",
       "fileReplacePosition": 186,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "0.0.1",
       "datasource": "maven",
       "depName": "org.example:foo",
       "fileReplacePosition": 905,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "1.0.0",
       "datasource": "maven",
       "depName": "org.example:bar",
       "fileReplacePosition": 1053,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "1.8.1",
       "datasource": "maven",
       "depName": "org.apache.maven.scm:maven-scm-provider-gitexe",
       "fileReplacePosition": 1485,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "0.0.1",
       "datasource": "maven",
       "depName": "org.example:\${artifact-id-placeholder}",
       "fileReplacePosition": 2230,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "0.0.1",
       "datasource": "maven",
       "depName": "\${group-id-placeholder}:baz",
       "fileReplacePosition": 2380,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "\${quuxVersion}",
       "datasource": "maven",
       "depName": "\${quuxGroup}:\${quuxId}",
       "fileReplacePosition": 2525,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "\${quuxVersion}",
       "datasource": "maven",
       "depName": "\${quuxGroup}:\${quuxId}-test",
       "fileReplacePosition": 2684,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "1.2.3",
       "datasource": "maven",
       "depName": "org.example:quuz",
       "fileReplacePosition": 2832,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "it's not a version",
       "datasource": "maven",
       "depName": "org.example:quuuz",
       "fileReplacePosition": 2972,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "[1.0.0]",
       "datasource": "maven",
       "depName": "org.example:hard-range",
       "fileReplacePosition": 3130,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "\${profile-placeholder}",
       "datasource": "maven",
       "depName": "org.example:profile-artifact",
       "fileReplacePosition": 3392,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
     Object {
       "currentValue": "2.17",
       "datasource": "maven",
       "depName": "org.apache.maven.plugins:maven-checkstyle-plugin",
       "fileReplacePosition": 3668,
-      "registryUrls": Array [
-        "https://repo.maven.apache.org/maven2",
-        "https://maven.atlassian.com/content/repositories/atlassian-public/",
-      ],
     },
   ],
   "mavenProps": Object {
@@ -153,5 +101,9 @@ Object {
     },
   },
   "packageFile": null,
+  "registryUrls": Array [
+    "https://repo.maven.apache.org/maven2",
+    "https://maven.atlassian.com/content/repositories/atlassian-public/",
+  ],
 }
 `;
diff --git a/test/manager/maven/index.spec.ts b/test/manager/maven/index.spec.ts
index 1f43c9c35fd53b9c72820122303ac7972b024343..11a30d65b9345ecf16f23fdab50b12cc23767e12 100644
--- a/test/manager/maven/index.spec.ts
+++ b/test/manager/maven/index.spec.ts
@@ -1,7 +1,7 @@
 import { readFileSync } from 'fs';
 import {
   extractPackage,
-  resolveProps,
+  resolveParents,
 } from '../../../lib/manager/maven/extract';
 import {
   extractAllPackageFiles,
@@ -77,7 +77,7 @@ describe('manager/maven', () => {
         depName === 'org.example:quux';
       const newValue = '9.9.9.9-final';
 
-      const packages = resolveProps([
+      const packages = resolveParents([
         extractPackage(pomParent, 'parent.pom.xml'),
         extractPackage(pomChild, 'child.pom.xml'),
       ]);
@@ -85,7 +85,7 @@ describe('manager/maven', () => {
       const dep = deps.find(finder);
       const upgrade = { ...dep, newValue };
       const updatedContent = updateDependency(pomParent, upgrade);
-      const [updatedPkg] = resolveProps([
+      const [updatedPkg] = resolveParents([
         extractPackage(updatedContent, 'parent.pom.xml'),
         extractPackage(pomChild, 'child.pom.xml'),
       ]);