diff --git a/lib/datasource/maven.js b/lib/datasource/maven.js
index 5cac133bbcf0327dbf651295344fa9b864ec2afb..683143bc8b4ae2643b436b0604bb10355981c232 100644
--- a/lib/datasource/maven.js
+++ b/lib/datasource/maven.js
@@ -2,20 +2,23 @@ const got = require('got');
 const url = require('url');
 const fs = require('fs-extra');
 const { XmlDocument } = require('xmldoc');
+const is = require('@sindresorhus/is');
 
 module.exports = {
   getPkgReleases,
 };
 
 // eslint-disable-next-line no-unused-vars
-async function getPkgReleases(purl, config) {
+async function getPkgReleases(purl) {
   const versions = [];
   const dependency = getDependencyParts(purl);
-  const repositories = getRepositories(purl);
-  if (repositories.length < 1) {
+  if (!is.nonEmptyArray(purl.repositoryUrls)) {
     logger.error(`No repositories defined for ${dependency.display}`);
     return null;
   }
+  const repositories = purl.repositoryUrls.map(repository =>
+    repository.replace(/\/?$/, '/')
+  );
   logger.debug(
     `Found ${repositories.length} repositories for ${dependency.display}`
   );
@@ -56,18 +59,6 @@ function getDependencyParts(purl) {
   };
 }
 
-function getRepositories(purl) {
-  if (!purl.qualifiers || !purl.qualifiers.repository_url) {
-    return [];
-  }
-  return purl.qualifiers.repository_url.split(',').map(repoUrl => {
-    if (!repoUrl.endsWith('/')) {
-      return repoUrl + '/';
-    }
-    return repoUrl;
-  });
-}
-
 async function downloadMavenMetadata(dependency, repoUrl) {
   const pkgUrl = new url.URL(
     `${dependency.dependencyUrl}/maven-metadata.xml`,
diff --git a/lib/util/purl.js b/lib/util/purl.js
index 10c16376a163d09796fdcaccb50843edf4af761c..2127ef6ace46d9e7a6150bdb036837d52d334e3f 100644
--- a/lib/util/purl.js
+++ b/lib/util/purl.js
@@ -45,6 +45,10 @@ function parse(input) {
       res.lookupType = res.qualifiers.lookupType;
       delete res.qualifiers.lookupType;
     }
+    if (res.qualifiers.repository_url) {
+      res.repositoryUrls = res.qualifiers.repository_url.split(',');
+      delete res.qualifiers.repository_url;
+    }
   } else {
     res.qualifiers = {};
   }
diff --git a/test/datasource/maven.spec.js b/test/datasource/maven.spec.js
index e6dfb40e9e3ebb84f37f76f58bf16c8532563eb4..18595b70d75b879bfa629e51ad1a026e8936cc84 100644
--- a/test/datasource/maven.spec.js
+++ b/test/datasource/maven.spec.js
@@ -45,7 +45,7 @@ describe('datasource/maven', () => {
       expect(releases).toBeNull();
     });
 
-    it('should return all versions of a specific library', async () => {
+    it('should simply return all versions of a specific library', async () => {
       const releases = await datasource.getPkgReleases({
         ...config,
         purl:
@@ -150,7 +150,7 @@ describe('datasource/maven', () => {
         .get('/maven2/mysql/mysql-connector-java/maven-metadata.xml')
         .reply(200, invalidMavenMetadata);
       const releases = await datasource.getPkgReleases({
-        config,
+        ...config,
         purl:
           'pkg:maven/mysql/mysql-connector-java?repository_url=http://central.maven.org/maven2/,http://invalid_metadata_repo/maven2/',
       });
@@ -159,7 +159,7 @@ describe('datasource/maven', () => {
 
     it('should return all versions of a specific library if a repository does not end with /', async () => {
       const releases = await datasource.getPkgReleases({
-        config,
+        ...config,
         purl:
           'pkg:maven/mysql/mysql-connector-java?repository_url=http://central.maven.org/maven2',
       });
diff --git a/test/util/__snapshots__/purl.spec.js.snap b/test/util/__snapshots__/purl.spec.js.snap
index b6c0af7e7fb5219eb41c5d4d69e3df9a72d26c6b..ceb89d7a6a03bd51cdd613a1886346fc39cd3055 100644
--- a/test/util/__snapshots__/purl.spec.js.snap
+++ b/test/util/__snapshots__/purl.spec.js.snap
@@ -58,6 +58,17 @@ Object {
 }
 `;
 
+exports[`util/purl parse() parses repository_url qualifier 1`] = `
+Object {
+  "datasource": "maven",
+  "lookupName": "org.apache.xmlgraphics/batik-anim",
+  "qualifiers": Object {},
+  "repositoryUrls": Array [
+    "repo.spring.io/release",
+  ],
+}
+`;
+
 exports[`util/purl parse() parses simple npm 1`] = `
 Object {
   "datasource": "npm",
diff --git a/test/util/purl.spec.js b/test/util/purl.spec.js
index c0b1d13e9407133d4a168ac23096093f2f803129..68d947ab698736a5810698d1a6831f213c71a646 100644
--- a/test/util/purl.spec.js
+++ b/test/util/purl.spec.js
@@ -29,5 +29,12 @@ describe('util/purl', () => {
     it('parses github with lookupType', () => {
       expect(parse('pkg:github/abc/def?lookupType=releases')).toMatchSnapshot();
     });
+    it('parses repository_url qualifier', () => {
+      expect(
+        parse(
+          'pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?repository_url=repo.spring.io/release'
+        )
+      ).toMatchSnapshot();
+    });
   });
 });