From 585131a254835ed9befce78d98f30598bd46448b Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Wed, 15 Jan 2020 21:38:58 +0100 Subject: [PATCH] fix(maven): loosen check for correct pom.xml Previously Renovate checked for xmlns="http://maven.apache.org/POM/4.0.0" and if not found then did not attempt to parse the file. Instead, now it checks for `<modelVersion>4.0.0</modelVersion>` as an alternative. Reference: https://maven.apache.org/guides/introduction/introduction-to-the-pom.html Closes #5160 --- lib/manager/maven/extract.ts | 13 ++++++++++--- .../maven/__snapshots__/extract.spec.ts.snap | 9 +++++++++ test/manager/maven/_fixtures/minimum.pom.xml | 6 ++++++ test/manager/maven/extract.spec.ts | 9 +++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 test/manager/maven/_fixtures/minimum.pom.xml diff --git a/lib/manager/maven/extract.ts b/lib/manager/maven/extract.ts index 4484dad38a..d8328124d7 100644 --- a/lib/manager/maven/extract.ts +++ b/lib/manager/maven/extract.ts @@ -1,3 +1,4 @@ +import is from '@sindresorhus/is'; import { basename, dirname, normalize, join } from 'path'; import { XmlDocument, XmlElement } from 'xmldoc'; import { isValid } from '../../versioning/maven'; @@ -14,10 +15,16 @@ export function parsePom(raw: string): XmlDocument | null { } catch (e) { return null; } - const { name, attr } = project; + const { name, attr, children } = project; if (name !== 'project') return null; - if (attr.xmlns !== 'http://maven.apache.org/POM/4.0.0') return null; - return project; + if (attr.xmlns === 'http://maven.apache.org/POM/4.0.0') return project; + if ( + is.nonEmptyArray(children) && + children.some((c: any) => c.name === 'modelVersion' && c.val === '4.0.0') + ) { + return project; + } + return null; } export function containsPlaceholder(str: string): boolean { diff --git a/test/manager/maven/__snapshots__/extract.spec.ts.snap b/test/manager/maven/__snapshots__/extract.spec.ts.snap index 29929e446d..05e299a0d3 100644 --- a/test/manager/maven/__snapshots__/extract.spec.ts.snap +++ b/test/manager/maven/__snapshots__/extract.spec.ts.snap @@ -165,3 +165,12 @@ Object { "packageFile": null, } `; + +exports[`manager/maven/extract extractDependencies tries minimum manifests 1`] = ` +Object { + "datasource": "maven", + "deps": Array [], + "mavenProps": Object {}, + "packageFile": null, +} +`; diff --git a/test/manager/maven/_fixtures/minimum.pom.xml b/test/manager/maven/_fixtures/minimum.pom.xml new file mode 100644 index 0000000000..ab3fb49d84 --- /dev/null +++ b/test/manager/maven/_fixtures/minimum.pom.xml @@ -0,0 +1,6 @@ +<project> + <modelVersion>4.0.0</modelVersion> + <groupId>com.mycompany.app</groupId> + <artifactId>my-app</artifactId> + <version>1</version> +</project> diff --git a/test/manager/maven/extract.spec.ts b/test/manager/maven/extract.spec.ts index 3447194b61..b209b00259 100644 --- a/test/manager/maven/extract.spec.ts +++ b/test/manager/maven/extract.spec.ts @@ -3,6 +3,11 @@ import { readFileSync } from 'fs'; import { resolve } from 'path'; import { extractPackage } from '../../../lib/manager/maven/extract'; +const minimumContent = readFileSync( + resolve(__dirname, `./_fixtures/minimum.pom.xml`), + 'utf8' +); + const simpleContent = readFileSync( resolve(__dirname, `./_fixtures/simple.pom.xml`), 'utf8' @@ -21,5 +26,9 @@ describe('manager/maven/extract', () => { const res = extractPackage(simpleContent); expect(res).toMatchSnapshot(); }); + it('tries minimum manifests', () => { + const res = extractPackage(minimumContent); + expect(res).toMatchSnapshot(); + }); }); }); -- GitLab