File javapackages-6.1.0-maven-depmap.patch of Package javapackages-tools

diff --git a/build b/build
index 8e676f2d..e728aeaf 100755
--- a/build
+++ b/build
@@ -66,6 +66,7 @@ expand etc/java.conf
 expand etc/eclipse.conf
 expand macros.d/macros.jpackage
 expand macros.d/macros.fjava
+expand macros.d/macros.javapackages-compat
 expand java-utils/java-functions
 expand depgenerators/maven.req
 expand depgenerators/maven.prov
diff --git a/install b/install
index e80db4cf..52c714f4 100755
--- a/install
+++ b/install
@@ -187,6 +187,12 @@ inst_data target/pom_xpath_remove.7 "${mandir}/man7"
 inst_data target/pom_xpath_replace.7 "${mandir}/man7"
 inst_data target/pom_xpath_set.7 "${mandir}/man7"
 
+exec >files-compat
+
+inst_data java-utils/install_pom.py "${javadir}-utils"
+inst_data java-utils/maven_depmap.py "${javadir}-utils"
+
+inst_data target/macros.javapackages-compat "${rpmmacrodir}"
 
 exec >files-extra
 
diff --git a/java-utils/install_pom.py b/java-utils/install_pom.py
new file mode 100644
index 00000000..e0282773
--- /dev/null
+++ b/java-utils/install_pom.py
@@ -0,0 +1,261 @@
+#
+# Copyright (c) 2014-2016, Red Hat, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the
+#    distribution.
+# 3. Neither the name of Red Hat nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:  Michal Srb <msrb@redhat.com>
+
+from javapackages.maven.pom import POM, PomLoadingException
+
+from javapackages.xmvn.xmvn_resolve import (XMvnResolve, ResolutionRequest,
+                                            XMvnResolveException)
+from javapackages.common.exception import JavaPackagesToolsException
+
+import sys
+import os
+from xml.etree import ElementTree
+from optparse import OptionParser
+
+
+usage = "usage: %prog <Source POM> <Output POM>"
+epilog = """
+Resolves pom file from its parents and sanitizes its
+dependencies so that it includes only those that have
+compile or runtime scope.
+
+Source POM:
+Path where POM file is located.
+
+Output POM:
+Path where the sanitized POM file will be written to.
+"""
+
+
+def get_parent_pom(pom):
+
+    req = ResolutionRequest(pom.groupId, pom.artifactId,
+                            extension="pom", version=pom.version)
+    result = XMvnResolve.process_raw_request([req])[0]
+    if not result:
+        raise XMvnResolveException("Unable to resolve parent POM {g}:{a}:{e}:{v}"
+                                   .format(g=pom.groupId, a=pom.artifactId,
+                                           e="pom", v=pom.version))
+
+    return POM(result.artifactPath)
+
+
+def merge_sections(main, update):
+    for upd in update:
+        for curr in main:
+            if curr.compare_to(upd):
+                curr.merge_with(upd)
+                break
+        else:
+            main.append(upd)
+
+
+def get_model_variables(pom):
+    props = {}
+    if pom.groupId:
+        props["project.groupId"] = pom.groupId
+    if pom.artifactId:
+        props["project.artifactId"] = pom.artifactId
+    if pom.version:
+        props["project.version"] = pom.version
+    return props
+
+
+def expand_props(deps, props):
+    for d in deps:
+        d.interpolate(props)
+
+def gather_dependencies(pom_path):
+    pom = POM(pom_path)
+    pom_props = get_model_variables(pom)
+    deps, depm, props = _get_dependencies(pom)
+    # expand project model variables
+    expand_props(deps, pom_props)
+    expand_props(depm, pom_props)
+
+    curr_pom = pom
+    parent = pom.parent
+    while parent:
+        ppom = None
+        if hasattr(parent, "relativePath") and parent.relativePath != "":
+            try:
+                ppom_path = os.path.join(os.path.dirname(curr_pom._path),
+                                         parent.relativePath)
+                if os.path.isdir(ppom_path):
+                    ppom_path = os.path.join(ppom_path, 'pom.xml')
+                ppom = POM(ppom_path)
+            except PomLoadingException:
+                pass
+        else:
+            try:
+                ppom_path = os.path.join(os.path.dirname(curr_pom._path), '..')
+                if os.path.isdir(ppom_path):
+                    ppom_path = os.path.join(ppom_path, 'pom.xml')
+                ppom = POM(ppom_path)
+            except PomLoadingException:
+                pass
+
+        if not ppom:
+            try:
+                ppom = get_parent_pom(parent)
+            except XMvnResolveException:
+                break
+
+        parent = ppom.parent
+        pom_props = get_model_variables(ppom)
+        pdeps, pdepm, pprops = _get_dependencies(ppom)
+        expand_props(pdeps, pom_props)
+        expand_props(pdepm, pom_props)
+
+        # merge "dependencies" sections
+        merge_sections(deps, pdeps)
+        # merge "dependencyManagement" sections
+        merge_sections(depm, pdepm)
+
+        # merge "properties" sections
+        for pkey in pprops:
+            if pkey not in props:
+                props[pkey] = pprops[pkey]
+
+        curr_pom = ppom
+
+    for d in deps:
+        d.interpolate(props)
+
+    for dm in depm:
+        dm.interpolate(props)
+
+    # apply dependencyManagement on deps
+    for d in deps:
+        for dm in depm:
+            if d.compare_to(dm):
+                d.merge_with(dm)
+                break
+
+    # only deps with scope "compile" or "runtime" are interesting
+    deps = [x for x in deps if x.scope in ["", "compile", "runtime"]]
+
+    return deps
+
+
+def _get_dependencies(pom):
+    deps = []
+    depm = []
+    props = {}
+
+    for x in pom.dependencies:
+        if hasattr(x, "version") and x.version == "any":
+            x.version = None
+        deps.append(x)
+    depm.extend([x for x in pom.dependencyManagement])
+    props = pom.properties
+
+    return deps, depm, props
+
+
+def _main():
+    OptionParser.format_epilog = lambda self, formatter: self.epilog
+    parser = OptionParser(usage=usage,
+                        epilog=epilog)
+
+    (options, args) = parser.parse_args()
+    if len(args) != 2:
+        parser.error("2 argument2 are required")
+
+    if not os.path.exists(args[0]):
+        message = ("The first argument '{0}' doesn't point to an existing file ").format(args[0])
+        parser.error(message)
+
+    if not os.path.exists(os.path.dirname(os.path.abspath(args[1]))):
+        message = ("The path '{0}' doesn't exist ").format(os.path.dirname(args[1]))
+        parser.error(message)
+
+    if not os.path.isdir(os.path.dirname(os.path.abspath(args[1]))):
+        message = ("The path '{0}' is not a directory ").format(os.path.dirname(args[1]))
+        parser.error(message)
+
+    if os.path.exists(args[1]):
+        message = ("The path '{0}' exists. Refusing to overwrite ").format(args[1])
+        parser.error(message)
+
+    pom_path = args[0]
+    uart = POM(pom_path)
+
+    tree = None
+    ElementTree.register_namespace('',"http://maven.apache.org/POM/4.0.0")
+    if uart.packaging and uart.packaging.lower() == 'pom':
+        tree = ElementTree.parse(args[0])
+    else:
+        result_pom = "<?xml version='1.0' encoding='UTF-8'?>\n"
+        result_pom += "<project xmlns=\"http://maven.apache.org/POM/4.0.0\">\n"
+        result_pom += "  <modelVersion>4.0.0</modelVersion>\n"
+        result_pom += ("  <groupId>{0}</groupId>\n" ).format(uart.groupId)
+        result_pom += ("  <artifactId>{0}</artifactId>\n" ).format(uart.artifactId)
+        result_pom += ("  <version>{0}</version>\n").format(uart.version)
+
+        if hasattr(uart, "packaging") and uart.packaging != 'jar':
+            result_pom += ("  <packaging>{0}</packaging>\n").format(uart.packaging)
+        if hasattr(uart, "extension") and uart.extension != 'jar':
+            result_pom += ("  <extension>{0}</extension>\n").format(uart.extension)
+        if hasattr(uart, "classifier") and uart.classifiler != '':
+            result_pom += ("  <classifier>{0}</classifier>\n").format(uart.classifier)
+
+        mvn_deps = gather_dependencies(pom_path)
+        if mvn_deps:
+            result_pom += "  <dependencies>\n"
+            for d in mvn_deps:
+                result_pom += "    <dependency>\n"
+                result_pom += ("      <groupId>{0}</groupId>\n").format(d.groupId)
+                result_pom += ("      <artifactId>{0}</artifactId>\n" ).format(d.artifactId)
+                if hasattr(d, "version"):
+                    result_pom += ("      <version>{0}</version>\n" ).format(d.version)
+                if hasattr(d, "extension") and d.extension != 'jar':
+                    result_pom += ("      <extension>{0}</extension>\n").format(d.extension)
+                if hasattr(d, "classifier") and d.classifier != '':
+                    result_pom += ("      <classifier>{0}</classifier>\n").format(d.classifier)
+                if hasattr(d, "type") and d.type != '':
+                    result_pom += ("      <type>{0}</type>\n").format(d.type)
+                if hasattr(d, "optional") and d.optional.lower() == "true":
+                    result_pom += ("      <optional>{0}</optional>\n").format(d.optional.lower())
+                result_pom += "    </dependency>\n"
+            result_pom += "  </dependencies>\n"
+
+        result_pom += "</project>\n"
+        tree = ElementTree.ElementTree(ElementTree.XML(result_pom))
+    tree.write(args[1],encoding="UTF-8",xml_declaration=True)
+    os.chmod(args[1], 0o0644)
+
+if __name__ == "__main__":
+    try:
+        _main()
+    except JavaPackagesToolsException as e:
+        sys.exit(e)
diff --git a/java-utils/maven_depmap.py b/java-utils/maven_depmap.py
new file mode 100644
index 00000000..6a0520fa
--- /dev/null
+++ b/java-utils/maven_depmap.py
@@ -0,0 +1,357 @@
+#
+# Copyright (c) 2014, Red Hat, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the
+#    distribution.
+# 3. Neither the name of Red Hat nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Stanislav Ochotnicky <sochotnicky@redhat.com>
+#
+# this script is used by add_maven_depmap rpm macro to generate
+# mapping between maven groupId:artifactId and jar file in our local
+# filesystem (i.e. %{_javadir})
+# rpm macro expects to find this file as %{_javadir}-utils/maven_depmap.py
+
+
+from optparse import OptionParser
+import os
+import shutil
+import sys
+
+from os.path import basename, dirname
+import zipfile
+from time import gmtime, strftime
+from copy import deepcopy
+
+from javapackages.maven.pom import POM
+from javapackages.metadata.artifact import MetadataArtifact
+from javapackages.metadata.alias import MetadataAlias
+from javapackages.metadata.dependency import MetadataDependency
+from javapackages.metadata.metadata import Metadata
+
+from javapackages.common.exception import JavaPackagesToolsException
+
+
+class PackagingTypeMissingFile(JavaPackagesToolsException):
+    def __init__(self, pom_path):
+        self.args=("Packaging type is not 'pom' and no artifact path has been provided for POM %s" % pom_path,)
+
+class IncompatibleFilenames(JavaPackagesToolsException):
+    def __init__(self, pom_path, jar_path):
+        self.args=("Filenames of POM %s and JAR %s does not match properly. Check that JAR subdirectories matches '.' in pom name." % (pom_path, jar_path),)
+
+class ExtensionsDontMatch(JavaPackagesToolsException):
+    def __init__(self, coordinates_ext, file_ext):
+        self.args=("Extensions don't match: '%s' != '%s'" % (coordinates_ext, file_ext),)
+
+class MissingJarFile(JavaPackagesToolsException):
+    def __init__(self):
+        self.args=("JAR seems to be missing in standard directories. Make sure you have installed it",)
+
+class UnknownFileExtension(JavaPackagesToolsException):
+    def __init__(self, jar_path):
+        self.args=("Unknown file extension: %s" % (jar_path),)
+
+
+def _print_path_with_dirs(path, base):
+    print(path)
+    path = dirname(path)
+    while path != base and path != '/':
+        print("%dir " + path)
+        path = dirname(path)
+
+
+def _make_files_versioned(versions, pom_path, jar_path, pom_base, jar_base):
+    """Make pom and jar file versioned"""
+    versions = sorted(set(versions.split(',')))
+
+    vpom_path = pom_path
+    vjar_path = jar_path
+
+    ret_pom_path = pom_path
+    ret_jar_path = jar_path
+
+    # pom
+    if ':' not in vpom_path:
+        root, ext = os.path.splitext(vpom_path)
+        symlink = False
+        for ver in sorted(versions):
+            dest = "%s-%s%s" % (root, ver, ext)
+            if not symlink:
+                shutil.copy(os.path.realpath(vpom_path), dest)
+                symlink = True
+                vpom_path = dest
+                ret_pom_path = dest
+            else:
+                os.symlink(basename(vpom_path), dest)
+            # output file path for file lists
+            _print_path_with_dirs(dest, pom_base)
+        # remove unversioned pom
+        os.remove(pom_path)
+
+    # jar
+    if vjar_path:
+        root, ext = os.path.splitext(vjar_path)
+        symlink = False
+        for ver in sorted(versions):
+            dest = "%s-%s%s" % (root, ver, ext)
+            if not symlink:
+                shutil.copy(os.path.realpath(vjar_path), dest)
+                symlink = True
+                vjar_path = dest
+                ret_jar_path = dest
+            else:
+                os.symlink(basename(vjar_path), dest)
+            # output file path for file lists
+            _print_path_with_dirs(dest, jar_base)
+        # remove unversioned jar
+        os.remove(jar_path)
+
+    # return paths to versioned, but regular files (not symlinks)
+    return ret_pom_path, ret_jar_path
+
+def _resolve_deps(pom):
+    deps = []
+    depm = []
+    props = {}
+
+    deps.extend([x for x in pom.dependencies])
+    depm.extend([x for x in pom.dependencyManagement])
+    props = pom.properties
+    if pom.groupId:
+        props["project.groupId"] = pom.groupId
+    if pom.artifactId:
+        props["project.artifactId"] = pom.artifactId
+    if pom.version:
+        props["project.version"] = pom.version
+
+    for d in deps:
+        d.interpolate(props)
+
+    for dm in depm:
+        dm.interpolate(props)
+
+    # apply dependencyManagement on deps
+    for d in deps:
+        for dm in depm:
+            if d.compare_to(dm):
+                d.merge_with(dm)
+                break
+
+    # only deps with scope "compile" or "runtime" are interesting
+    deps = [x for x in deps if x.scope in ["", "compile", "runtime"]]
+
+    return deps
+
+# Add a file to a ZIP archive (or JAR, WAR, ...) unless the file
+# already exists in the archive.  Provided by Tomas Radej.
+def append_if_missing(archive_name, file_name, file_contents):
+    archive = zipfile.ZipFile(archive_name, 'a')
+    try:
+        if file_name not in archive.namelist():
+            archive.writestr(file_name, file_contents)
+    finally:
+        archive.close()
+
+
+# Inject pom.properties if JAR doesn't have one.  This is necessary to
+# identify the origin of JAR files that are present in the repository.
+def inject_pom_properties(jar_path, artifact):
+    if not zipfile.is_zipfile(jar_path):
+        return
+    props_path = "META-INF/maven/{a.groupId}/{a.artifactId}/pom.properties".format(a=artifact)
+    properties = """#Generated by Java Packages Tools
+version={a.version}
+groupId={a.groupId}
+artifactId={a.artifactId}
+""".format(a=artifact)
+
+    if artifact.extension:
+        properties = properties + \
+            "extension={ext}\n".format(ext=artifact.extension)
+    if artifact.classifier:
+        properties = properties + \
+            "classifier={clas}\n".format(clas=artifact.classifier)
+
+    append_if_missing(jar_path, props_path, properties)
+
+
+def add_compat_versions(artifact, versions):
+    if not versions:
+        return artifact
+
+    artifact.compatVersions = versions.split(',')
+    return artifact
+
+
+def add_aliases(artifact, additions):
+    if not additions:
+        return artifact
+
+    aliases = additions.split(',')
+    result = list()
+    for a in aliases:
+        alias = MetadataAlias.from_mvn_str(a)
+        alias.extension = artifact.extension
+        result.append(alias)
+
+    artifact.aliases = result
+    return artifact
+
+
+def write_metadata(metadata_file, artifacts):
+    if os.path.exists(metadata_file):
+        metadata = Metadata.create_from_file(metadata_file)
+    else:
+        metadata = Metadata()
+
+    # pylint:disable=E1103
+    metadata.artifacts += deepcopy(artifacts)
+
+    metadata.write_to_file(metadata_file)
+
+
+def _main():
+    usage="usage: %prog [options] metadata_path pom_path|<MVN spec> [jar_path]"
+    parser = OptionParser(usage=usage)
+    parser.add_option("-a","--append",type="str",
+                      help="Additional depmaps to add (gid:aid)  [default: %default]")
+    parser.add_option('-r', '--versions', type="str",
+                      help='Additional versions to add for each depmap')
+    parser.add_option('-n', '--namespace', type="str",
+                      help='Namespace to use for generated fragments', default="")
+    parser.add_option('--pom-base', type="str",
+                      help='Base path under which POM files are installed', default="")
+    parser.add_option('--jar-base', type="str",
+                      help='Base path under which JAR files are installed', default="")
+
+    parser.set_defaults(append=None)
+
+    (options, args) = parser.parse_args()
+    append_deps = options.append
+    add_versions = options.versions
+    namespace = options.namespace
+    pom_base = options.pom_base
+    jar_base = options.jar_base
+
+    if len(args) < 2:
+        parser.error("Incorrect number of arguments")
+    # These will fail when incorrect number of arguments is given.
+    metadata_path = args[0].strip()
+    pom_path = args[1].strip()
+    jar_path = None
+
+    artifact = None
+    have_pom = False
+
+    if len(args) == 3:
+        jar_path = args[2].strip()
+        if ':' in pom_path:
+            pom_str = pom_path.rsplit('/')[-1]
+            artifact = MetadataArtifact.from_mvn_str(pom_str)
+            artifact_ext = artifact.extension or "jar"
+            file_ext = os.path.splitext(jar_path)[1][1:]
+            if artifact_ext != file_ext:
+                raise ExtensionsDontMatch(artifact_ext, file_ext)
+
+            if artifact.extension == 'jar':
+                artifact.extension = ''
+
+            if not artifact.version:
+                parser.error("Artifact definition has to include version")
+        else:
+            artifact = MetadataArtifact.from_pom(pom_path)
+            ext = os.path.splitext(jar_path)[1][1:]
+            if ext != "jar":
+                artifact.extension = ext
+            have_pom = True
+        if artifact:
+            inject_pom_properties(jar_path, artifact)
+    else:
+        # looks like POM only artifact
+        if ':' not in pom_path:
+            artifact = MetadataArtifact.from_pom(pom_path)
+            have_pom = True
+
+            if POM(pom_path).packaging != "pom":
+                raise PackagingTypeMissingFile(pom_path)
+        else:
+            sys.exit("JAR file path must be specified when using artifact coordinates")
+
+
+    # output file path for file lists
+    print(metadata_path)
+
+    artifact = add_compat_versions(artifact, add_versions)
+    if add_versions:
+        pom_path, jar_path = _make_files_versioned(add_versions, pom_path, jar_path, pom_base, jar_base)
+
+    if namespace:
+        artifact.namespace = namespace
+
+    if have_pom:
+        pom = POM(pom_path)
+        if pom.parent or pom.packaging == "pom":
+            artifact.properties["xmvn.resolver.disableEffectivePom"] = "true"
+        else:
+            deps = []
+            for d in _resolve_deps(pom):
+                deps.append(MetadataDependency.from_mvn_dependency(d))
+            if deps:
+                artifact.dependencies = set(deps)
+
+
+    buildroot = os.environ.get('RPM_BUILD_ROOT')
+    am = []
+    if jar_path:
+        metadata_jar_path = os.path.abspath(jar_path)
+        artifact.path = metadata_jar_path.replace(buildroot, "") if buildroot else metadata_jar_path
+        artifact = add_aliases(artifact, append_deps)
+        if artifact.extension == "jar":
+            artifact.extension = ""
+        am.append(artifact.copy())
+        # output file path for file list (if it's not versioned)
+        if not add_versions:
+            _print_path_with_dirs(jar_path, jar_base)
+    if have_pom:
+        metadata_pom_path = os.path.abspath(pom_path)
+        artifact.path = metadata_pom_path.replace(buildroot, "") if buildroot else metadata_pom_path
+        artifact.extension = "pom"
+        artifact.aliases = None
+        artifact = add_aliases(artifact, append_deps)
+        am.append(artifact.copy())
+        # output file path for file list (if it's not versioned)
+        if not add_versions:
+            _print_path_with_dirs(pom_path, pom_base)
+
+    write_metadata(metadata_path, am)
+
+
+if __name__ == "__main__":
+    try:
+        _main()
+    except JavaPackagesToolsException as e:
+        sys.exit(e)
diff --git a/javapackages-tools.spec b/javapackages-tools.spec
index d2b6a235..65ac4e17 100644
--- a/javapackages-tools.spec
+++ b/javapackages-tools.spec
@@ -72,6 +72,14 @@ Provides:       %{?scl_prefix}eclipse-filesystem = %{version}-%{release}
 This package provides some basic directories into which Java packages
 install their content.
 
+%package -n %{?scl_prefix}javapackages-compat
+Summary:        Previously deprecated macros and scripts for Java packaging support
+Requires:       %{?scl_prefix}javapackages-local = %{version}-%{release}
+
+%description -n %{?scl_prefix}javapackages-compat
+This package provides previously deprecated macros and scripts to
+support Java packaging as well as some additions to them.
+
 %package -n %{?scl_prefix}maven-local
 Summary:        Macros and scripts for Maven packaging support
 Requires:       %{name} = %{version}-%{release}
@@ -173,6 +181,8 @@ rm -rf %{buildroot}%{_mandir}/man7/gradle_build.7
 
 %files -n %{?scl_prefix}javapackages-filesystem -f files-filesystem
 
+%files -n %{?scl_prefix}javapackages-compat -f files-compat
+
 %files -n %{?scl_prefix}javapackages-local -f files-local
 
 %files -n %{?scl_prefix}maven-local
diff --git a/macros.d/macros.javapackages-compat b/macros.d/macros.javapackages-compat
new file mode 100644
index 00000000..6570156e
--- /dev/null
+++ b/macros.d/macros.javapackages-compat
@@ -0,0 +1,95 @@
+# Copyright (c) 2012-2016, Red Hat, Inc
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the
+#    distribution.
+# 3. Neither the name of Red Hat nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Stanislav Ochotnicky <sochotnicky@redhat.com>
+#          Mikolaj Izdebski <mizdebsk@redhat.com>
+
+
+# %mvn_install_pom - Resolve the pom as much as possible and install it
+#
+# Usage: %mvn_install_pom <source pom> <output pom>
+#
+%mvn_install_pom @{pyinterpreter} @{javadir}-utils/install_pom.py
+
+#==============================================================================
+#
+# add_maven_depmap is simplified version of jpackage-style add_to_maven_depmap
+# -f addition to fragment name
+# -a is "g1:a1,g2:a2" formatted string with additional depmaps (groupId:artifactId,...)
+# -v is "v1,v2" formatted string with additional compatibility versions
+#    supposed to be provided (jar,pom will be renamed to -%{version} variants
+#    and additional symlinks optionally created)
+# %1 is the pom filename relative to mavenpomdir
+# %2 is the path to jar file (when omitted we deal with parent pom file without jar)
+#
+# add_maven_depmap automatically parses pom file and it will fail with incorrect pom
+# or jar filename
+#
+# in the end add_maven_depmap optionally moves jar and pom file to
+# -%{version} variant and can create additional versioned symlinks
+
+%add_maven_depmap(f:a:v:) \
+set -e \
+# default values \
+%if %# == 0 \
+   _pompart="JPP-%{name}.pom" \
+   _jarpart="%{name}.jar" \
+%else \
+   _pompart="%1" \
+   _jarpart="%2" \
+%endif \
+_filelist=".mfiles%{-f*:-%{-f*}}" \
+install -dm 755 %{buildroot}%{_datadir}/maven-metadata \
+_jbase= \
+_jpath= \
+for _dir in %{_jnidir} %{_javadir}; do \
+    if [ -f %{buildroot}$_dir/$_jarpart ]; then \
+	_jbase="%{buildroot}$_dir" \
+	_jpath="$_jbase/$_jarpart" \
+    fi \
+done \
+%if %# != 1 \
+    [ -z "$_jpath" ] && (echo "%0 error: $_jarpart - file not found" 1>&2; exit 1) \
+%endif \
+@{pyinterpreter} @{javadir}-utils/maven_depmap.py %{-a} %{-v*:-r %{-v*}} \\\
+                 --pom-base %{buildroot}%{_mavenpomdir} \\\
+                 --jar-base "$_jbase" \\\
+                 %{buildroot}%{_datadir}/maven-metadata/%{name}%{-f*:-%{-f*}}.xml \\\
+                 %{buildroot}%{_mavenpomdir}/$_pompart \\\
+%if %# == 2 \
+          "${_jpath}" \\\
+%endif \
+%if %# == 0 \
+          "${_jpath}" \\\
+%endif \
+        >> ${_filelist} \
+sed -i 's:%{buildroot}::' ${_filelist} \
+sort -u -o ${_filelist} ${_filelist} \
+\
+%{nil}
diff --git a/test/data/install_pom/JPP-apache-commons-io.pom b/test/data/install_pom/JPP-apache-commons-io.pom
new file mode 100644
index 00000000..9349ebdd
--- /dev/null
+++ b/test/data/install_pom/JPP-apache-commons-io.pom
@@ -0,0 +1,22 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>org.apache.commons</groupId>
+    <artifactId>commons-parent</artifactId>
+    <version>17</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>commons-io</groupId>
+  <artifactId>commons-io</artifactId>
+  <version>2</version>
+  <name>Commons Lang</name>
+  <packaging>pom</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>G</groupId>
+      <artifactId>G</artifactId>
+      <version>1000</version>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/test/data/install_pom/JPP-bndlib.pom b/test/data/install_pom/JPP-bndlib.pom
new file mode 100644
index 00000000..bf1efe5e
--- /dev/null
+++ b/test/data/install_pom/JPP-bndlib.pom
@@ -0,0 +1,72 @@
+
+<project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'>
+  <modelVersion>
+    4.0.0
+  </modelVersion>
+  <groupId>
+    biz.aQute
+  </groupId>
+  <artifactId>
+    bndlib
+  </artifactId>
+  <version>
+    1.50.0
+  </version>
+  <description>
+    A Swiss Army Knife for OSGi
+  </description>
+  <name>
+    bnd - Bundle Tool
+  </name>
+  <url>
+    http://www.aQute.biz/Code/Bnd
+  </url>
+  <scm>
+    <url>
+      git://github.com/bndtools/bnd.git
+    </url>
+    <connection>
+      git://github.com/bndtools/bnd.git
+    </connection>
+    <developerConnection>
+      git://github.com/bndtools/bnd.git
+    </developerConnection>
+  </scm>
+  <organization>
+    <name>
+      aQute SARL
+    </name>
+    <url>
+      http://www.aQute.biz
+    </url>
+  </organization>
+  <developers>
+    <developer>
+      <id>
+        Peter.Kriens@aQute.biz
+      </id>
+      <name>
+        Peter.Kriens
+      </name>
+      <email>
+        Peter.Kriens@aQute.biz
+      </email>
+      <organization>
+        aQute
+      </organization>
+    </developer>
+  </developers>
+  <licenses>
+    <license>
+      <name>
+        Apache Software License 2.0
+      </name>
+      <url>
+        http://www.opensource.org/licenses/apache2.0.php
+      </url>
+      <distribution>
+        repo
+      </distribution>
+    </license>
+  </licenses>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/JPP-noversion-pom.pom b/test/data/install_pom/JPP-noversion-pom.pom
new file mode 100644
index 00000000..a789d1b6
--- /dev/null
+++ b/test/data/install_pom/JPP-noversion-pom.pom
@@ -0,0 +1,9 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.commons</groupId>
+  <groupId>commons-io</groupId>
+  <artifactId>commons-io</artifactId>
+  <name>Commons Lang</name>
+  <packaging>pom</packaging>
+
+</project>
diff --git a/test/data/install_pom/JPP-noversion.pom b/test/data/install_pom/JPP-noversion.pom
new file mode 100644
index 00000000..bd87edea
--- /dev/null
+++ b/test/data/install_pom/JPP-noversion.pom
@@ -0,0 +1,8 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.commons</groupId>
+  <groupId>commons-io</groupId>
+  <artifactId>commons-io</artifactId>
+  <name>Commons Lang</name>
+
+</project>
diff --git a/test/data/install_pom/JPP-parent-version.pom b/test/data/install_pom/JPP-parent-version.pom
new file mode 100644
index 00000000..4e40fa2a
--- /dev/null
+++ b/test/data/install_pom/JPP-parent-version.pom
@@ -0,0 +1,9 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>a</artifactId>
+  <parent>
+    <groupId>g</groupId>
+    <artifactId>p</artifactId>
+    <version>1</version>
+  </parent>
+</project>
diff --git a/test/data/install_pom/a_binary_file.pom b/test/data/install_pom/a_binary_file.pom
new file mode 100644
index 00000000..5b3a2335
Binary files /dev/null and b/test/data/install_pom/a_binary_file.pom differ
diff --git a/test/data/install_pom/cglib/cglib-integration-test/pom.xml b/test/data/install_pom/cglib/cglib-integration-test/pom.xml
new file mode 100644
index 00000000..1c717477
--- /dev/null
+++ b/test/data/install_pom/cglib/cglib-integration-test/pom.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <!-- ====================================================================== -->
+    <!-- P A R E N T  P R O J E C T  D E S C R I P T I O N -->
+    <!-- ====================================================================== -->
+    <parent>
+        <groupId>cglib</groupId>
+        <artifactId>cglib-parent</artifactId>
+        <version>3.3.0</version>
+    </parent>
+
+    <!-- ====================================================================== -->
+    <!-- P R O J E C T  D E S C R I P T I O N -->
+    <!-- ====================================================================== -->
+    <artifactId>cglib-integration-test</artifactId>
+    <packaging>jar</packaging>
+
+    <!-- ====================================================================== -->
+    <!-- B U I L D -->
+    <!-- ====================================================================== -->
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>integration-test</goal>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <directory>${basedir}/..</directory>
+                <targetPath>META-INF</targetPath>
+                <includes>
+                    <include>LICENSE</include>
+                    <include>NOTICE</include>
+                    <include>README</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+
+    <!-- ====================================================================== -->
+    <!-- D E P E N D E N C I E S -->
+    <!-- ====================================================================== -->
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>cglib</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>cglib-sample</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/test/data/install_pom/cglib/cglib/pom.xml b/test/data/install_pom/cglib/cglib/pom.xml
new file mode 100644
index 00000000..4563e67f
--- /dev/null
+++ b/test/data/install_pom/cglib/cglib/pom.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <!-- ====================================================================== -->
+    <!-- P A R E N T  P R O J E C T  D E S C R I P T I O N -->
+    <!-- ====================================================================== -->
+    <parent>
+        <groupId>cglib</groupId>
+        <artifactId>cglib-parent</artifactId>
+        <version>3.3.0</version>
+    </parent>
+
+    <!-- ====================================================================== -->
+    <!-- P R O J E C T  D E S C R I P T I O N -->
+    <!-- ====================================================================== -->
+    <artifactId>cglib</artifactId>
+    <packaging>jar</packaging>
+
+    <!-- ====================================================================== -->
+    <!-- B U I L D -->
+    <!-- ====================================================================== -->
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+            </plugin>
+        </plugins>
+
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <directory>${basedir}/..</directory>
+                <targetPath>META-INF</targetPath>
+                <includes>
+                    <include>LICENSE</include>
+                    <include>NOTICE</include>
+                    <include>README</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+
+    <!-- ====================================================================== -->
+    <!-- D E P E N D E N C I E S -->
+    <!-- ====================================================================== -->
+    <dependencies>
+        <dependency>
+            <groupId>org.ow2.asm</groupId>
+            <artifactId>asm</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ant</groupId>
+            <artifactId>ant</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/test/data/install_pom/cglib/pom.xml b/test/data/install_pom/cglib/pom.xml
new file mode 100644
index 00000000..b4468689
--- /dev/null
+++ b/test/data/install_pom/cglib/pom.xml
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+      <groupId>org.sonatype.oss</groupId>
+      <artifactId>oss-parent</artifactId>
+      <version>7</version>
+    </parent>
+
+    <!-- ====================================================================== -->
+    <!-- P R O J E C T  D E S C R I P T I O N -->
+    <!-- ====================================================================== -->
+    <groupId>cglib</groupId>
+    <artifactId>cglib-parent</artifactId>
+    <version>3.3.0</version>
+    <packaging>pom</packaging>
+
+    <name>Code Generation Library</name>
+    <url>https://github.com/cglib/cglib</url>
+    <description>cglib is a powerful, high performance and quality Code Generation Library, It is used to extend JAVA classes and implements interfaces at runtime.</description>
+
+    <scm>
+        <connection>scm:git:git://github.com/cglib/cglib.git</connection>
+        <developerConnection>scm:git:ssh://git@github.com/cglib/cglib.git</developerConnection>
+        <url>https://github.com/cglib/cglib</url>
+    </scm>
+
+    <issueManagement>
+        <system>Github Issues</system>
+        <url>https://github.com/cglib/cglib/issues</url>
+    </issueManagement>
+
+    <ciManagement>
+        <system>Travis</system>
+        <url>https://travis-ci.org/cglib/cglib</url>
+    </ciManagement>
+
+    <licenses>
+        <license>
+            <name>ASF 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <!-- ====================================================================== -->
+    <!-- P R O P E R T I E S -->
+    <!-- ====================================================================== -->
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
+        <java.version.source>1.5</java.version.source>
+        <java.version.target>1.5</java.version.target>
+        <asm.version>7.1</asm.version>
+        <ant.version>1.10.3</ant.version>
+        <jmh.version>1.21</jmh.version>
+        <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
+        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
+        <maven-javadoc-plugin.version>3.0.1</maven-javadoc-plugin.version>
+        <maven-jar-plugin.version>3.1.0</maven-jar-plugin.version>
+        <java.compiler.argument />
+
+        <java.test.compiler.argument>${java.compiler.argument}</java.test.compiler.argument>
+        <gpg.skip>true</gpg.skip>
+    </properties>
+
+    <!-- ====================================================================== -->
+    <!-- M O D U L E S -->
+    <!-- ====================================================================== -->
+    <modules>
+        <module>cglib</module>
+        <module>cglib-nodep</module>
+        <module>cglib-sample</module>
+        <module>cglib-integration-test</module>
+        <module>cglib-jmh</module>
+    </modules>
+
+    <!-- ====================================================================== -->
+    <!-- P R O F I L E S -->
+    <!-- ====================================================================== -->
+    <profiles>
+        <profile>
+            <id>java8</id>
+            <activation>
+                <jdk>[1.8,)</jdk>
+            </activation>
+            <properties>
+                <java.test.compiler.argument>-parameters</java.test.compiler.argument>
+            </properties>
+        </profile>
+        <profile>
+            <id>java9</id>
+            <activation>
+                <jdk>[1.9,)</jdk>
+            </activation>
+            <properties>
+                <java.version.source>1.6</java.version.source>
+                <java.version.target>1.6</java.version.target>
+                <java.test.compiler.argument>-parameters</java.test.compiler.argument>
+            </properties>
+        </profile>
+    </profiles>
+
+    <!-- ====================================================================== -->
+    <!-- B U I L D -->
+    <!-- ====================================================================== -->
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>${maven-compiler-plugin.version}</version>
+                    <configuration>
+                        <source>${java.version.source}</source>
+                        <target>${java.version.target}</target>
+                        <compilerArgument>${java.compiler.argument}</compilerArgument>
+                        <testSource>${java.specification.version}</testSource>
+                        <testTarget>${java.specification.version}</testTarget>
+                        <testCompilerArgument>${java.test.compiler.argument}</testCompilerArgument>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>2.21.0</version>
+                    <configuration>
+                        <systemProperties>
+                            <property>
+                                <name>net.sf.cglib.test.stressHashCodes</name>
+                                <value>true</value>
+                            </property>
+                        </systemProperties>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-failsafe-plugin</artifactId>
+                    <version>2.21.0</version>
+                    <configuration>
+                        <systemProperties>
+                            <property>
+                                <name>net.sf.cglib.test.stressHashCodes</name>
+                                <value>true</value>
+                            </property>
+                        </systemProperties>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <version>${maven-javadoc-plugin.version}</version>
+                    <configuration>
+                      <quiet>true</quiet>
+                      <detectLinks>false</detectLinks>
+                      <detectOfflineLinks>false</detectOfflineLinks>
+                      <!--<skip>${skipJavadoc}</skip>-->
+                      <use>false</use>
+                      <doclint>none</doclint>
+                      <additionalDependencies>
+                        <additionalDependency>
+                          <groupId>org.ow2.asm</groupId>
+                          <artifactId>asm</artifactId>
+                          <version>${asm.version}</version>
+                        </additionalDependency>
+                        <additionalDependency>
+                          <groupId>org.apache.ant</groupId>
+                          <artifactId>ant</artifactId>
+                          <version>${ant.version}</version>
+                        </additionalDependency>
+                      </additionalDependencies>
+                    </configuration>
+                    <executions>
+                      <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                          <goal>jar</goal>
+                        </goals>
+                      </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.sonatype.plugins</groupId>
+                    <artifactId>jarjar-maven-plugin</artifactId>
+                    <version>1.9</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <plugins>
+            <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-gpg-plugin</artifactId>
+              <version>1.6</version>
+              <executions>
+              <execution>
+                <id>sign-artifacts</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+    </build>
+
+    <!-- ====================================================================== -->
+    <!-- D E P E N D E N C Y  M A N A G E M E N T -->
+    <!-- ====================================================================== -->
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>cglib</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>cglib-sample</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.ow2.asm</groupId>
+                <artifactId>asm</artifactId>
+                <version>${asm.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.ant</groupId>
+                <artifactId>ant</artifactId>
+                <version>${ant.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+                <version>4.12</version>
+                <scope>test</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+</project>
diff --git a/test/data/install_pom/fakedir b/test/data/install_pom/fakedir
new file mode 100644
index 00000000..e69de29b
diff --git a/test/data/install_pom/languagetool/languagetool-language-modules/ja/pom.xml b/test/data/install_pom/languagetool/languagetool-language-modules/ja/pom.xml
new file mode 100644
index 00000000..1df2ead4
--- /dev/null
+++ b/test/data/install_pom/languagetool/languagetool-language-modules/ja/pom.xml
@@ -0,0 +1,104 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>org.languagetool</groupId>
+        <artifactId>languagetool-parent</artifactId>
+        <version>4.8</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    
+    <artifactId>language-ja</artifactId>
+    <url>http://www.languagetool.org</url>
+    <name>Japanese module for LanguageTool</name>
+
+    <licenses>
+        <license>
+            <name>GNU Lesser General Public License</name>
+            <url>http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt</url>
+            <distribution>repo</distribution>
+            <comments>The license refers to the source code, resources may be under different licenses</comments>
+        </license>
+    </licenses>
+    
+    <packaging>jar</packaging>
+
+    <developers>
+        <developer>
+            <name>Daniel Naber</name>
+            <roles><role>Maintainer</role></roles>
+        </developer>
+        <developer>
+            <name>Marcin Miłkowski</name>
+            <roles><role>Maintainer</role></roles>
+        </developer>
+    </developers>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.languagetool</groupId>
+            <artifactId>languagetool-core</artifactId>
+            <version>${languagetool.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.lucene-gosen</groupId>
+            <artifactId>lucene-gosen</artifactId>
+            <version>6.2.1</version>
+            <classifier>ipadic</classifier>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.lucene</groupId>
+                    <artifactId>lucene-core</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.solr</groupId>
+                    <artifactId>solr-core</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.solr</groupId>
+                    <artifactId>solr-solrj</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.lucene</groupId>
+                    <artifactId>lucene-codecs</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.lucene</groupId>
+                    <artifactId>lucene-analyzers</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.lucene</groupId>
+                    <artifactId>lucene-analyzers-common</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        
+        <dependency>
+            <!-- see http://stackoverflow.com/questions/174560/sharing-test-code-in-maven#174670 -->
+            <groupId>org.languagetool</groupId>
+            <artifactId>languagetool-core</artifactId>
+            <version>${languagetool.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/languagetool/languagetool-standalone/pom.xml b/test/data/install_pom/languagetool/languagetool-standalone/pom.xml
new file mode 100644
index 00000000..37c51753
--- /dev/null
+++ b/test/data/install_pom/languagetool/languagetool-standalone/pom.xml
@@ -0,0 +1,163 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>org.languagetool</groupId>
+        <artifactId>languagetool-parent</artifactId>
+        <version>4.8</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    
+    <artifactId>languagetool-standalone</artifactId>
+    <url>http://www.languagetool.org</url>
+    <name>LanguageTool stand-alone GUI</name>
+
+    <licenses>
+        <license>
+            <name>GNU Lesser General Public License</name>
+            <url>http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+    
+    <packaging>jar</packaging>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
+                <directory>${basedir}</directory>
+                <targetPath>META-INF</targetPath>
+                <includes>
+                    <include>CHANGES.txt</include>
+                    <include>COPYING.txt</include>
+                    <include>README.txt</include>
+                </includes>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>${maven.jar.plugin}</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <classpathLayoutType>custom</classpathLayoutType>
+                            <customClasspathLayout>libs/$${artifact.artifactId}$${dashClassifier?}.$${artifact.extension}</customClasspathLayout>
+                        </manifest>
+                        <manifestEntries>
+                            <!-- as we later unzip the language JARs (see zip.xml), we need to add the top directory to the classpath: -->
+                            <Class-Path>./ languagetool-server.jar</Class-Path>
+                            <Main-Class>org.languagetool.gui.Main</Main-Class>
+                            <ComponentVersion>${project.version}</ComponentVersion>
+                            <Implementation-Date>${maven.build.timestamp}</Implementation-Date>
+                        </manifestEntries>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>${maven.assemby.plugin}</version>
+                <configuration>
+                    <descriptor>src/main/assembly/zip.xml</descriptor>
+                    <finalName>LanguageTool-${project.version}</finalName>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <addExtensions>false</addExtensions>
+                        </manifest>
+                    </archive>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.languagetool</groupId>
+            <artifactId>languagetool-core</artifactId>
+            <version>${languagetool.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.languagetool</groupId>
+            <artifactId>languagetool-gui-commons</artifactId>
+            <version>${languagetool.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.languagetool</groupId>
+            <artifactId>languagetool-commandline</artifactId>
+            <version>${languagetool.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.languagetool</groupId>
+            <artifactId>languagetool-server</artifactId>
+            <version>${languagetool.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.languagetool</groupId>
+            <artifactId>language-all</artifactId>
+            <version>${languagetool.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.languagetool</groupId>
+            <artifactId>languagetool-tools</artifactId>
+            <version>${languagetool.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <version>4.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.7.25</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.2.3</version>
+        </dependency>
+
+        <dependency>
+            <!-- see http://stackoverflow.com/questions/174560/sharing-test-code-in-maven#174670 -->
+            <groupId>org.languagetool</groupId>
+            <artifactId>languagetool-core</artifactId>
+            <version>${languagetool.version}</version>
+            <type>test-jar</type>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <!-- Some tests are used at runtime for rule developers, thus no 'test' scope here -->
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/test/data/install_pom/languagetool/pom.xml b/test/data/install_pom/languagetool/pom.xml
new file mode 100644
index 00000000..a47b9b01
--- /dev/null
+++ b/test/data/install_pom/languagetool/pom.xml
@@ -0,0 +1,233 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <prerequisites>
+    <maven>3.04</maven>
+  </prerequisites>
+    
+  <parent>
+    <groupId>org.sonatype.oss</groupId>
+    <artifactId>oss-parent</artifactId>
+    <version>7</version>
+  </parent>
+  
+  <scm>
+    <connection>scm:git:git@github.com:languagetool-org/languagetool.git</connection>
+    <developerConnection>scm:git:git@github.com:languagetool-org/languagetool.git</developerConnection>
+    <url>git@github.com:languagetool-org/languagetool.git</url>
+    <tag>HEAD</tag>
+  </scm>
+
+  <groupId>org.languagetool</groupId>
+  <artifactId>languagetool-parent</artifactId>
+  <version>4.8</version>
+  <packaging>pom</packaging>
+
+  <properties>
+      <languagetool.version>4.8</languagetool.version>
+      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+      <maven.compiler.source>1.8</maven.compiler.source>
+      <maven.compiler.target>1.8</maven.compiler.target>
+      <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
+      <maven.jar.plugin>2.6</maven.jar.plugin>  <!-- NOTE: don't update without testing OpenOffice, 3.0.2 caused "Got no data stream!" after add-on installation -->
+      <maven.assemby.plugin>2.6</maven.assemby.plugin>
+      <junit.version>4.12</junit.version>
+      <morfologik.version>2.1.6</morfologik.version>
+      <jackson.version>2.9.10</jackson.version>
+      <lucene.version>5.5.5</lucene.version>
+  </properties>
+  
+  <build>
+      
+      <extensions>
+		  <!-- needed to deploy to https://repository-languagetool.forge.cloudbees.com/snapshot/ -->
+          <extension>
+              <groupId>org.apache.maven.wagon</groupId>
+              <artifactId>wagon-webdav</artifactId>
+              <version>1.0-beta-2</version>
+          </extension>
+      </extensions>
+      
+      <pluginManagement>
+          <plugins>
+
+              <plugin>
+                  <!-- see https://github.com/languagetool-org/languagetool/issues/1745 -->
+                  <groupId>org.apache.maven.plugins</groupId>
+                  <artifactId>maven-enforcer-plugin</artifactId>
+                  <version>3.0.0-M2</version>
+                  <executions>
+                      <execution>
+                          <id>enforce</id>
+                          <configuration>
+                              <rules>
+                                  <dependencyConvergence/>
+                              </rules>
+                          </configuration>
+                          <goals>
+                              <goal>enforce</goal>
+                          </goals>
+                      </execution>
+                  </executions>
+              </plugin>
+              
+              <plugin>
+                  <groupId>pl.project13.maven</groupId>
+                  <artifactId>git-commit-id-plugin</artifactId>
+                  <version>2.2.6</version>
+                  <executions>
+                      <execution>
+                          <id>get-the-git-infos</id>
+                          <goals>
+                              <goal>revision</goal>
+                          </goals>
+                          <phase>initialize</phase>
+                      </execution>
+                  </executions>
+                  <configuration>
+                      <generateGitPropertiesFile>true</generateGitPropertiesFile>
+                      <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
+                  </configuration>
+              </plugin>
+              
+              <plugin>
+                  <artifactId>maven-compiler-plugin</artifactId>
+                  <version>3.8.0</version>
+                  <configuration>
+                      <!-- helps IntelliJ to not forget the configuration (https://stackoverflow.com/questions/29888592/): -->
+                      <source>${maven.compiler.source}</source>
+                      <target>${maven.compiler.target}</target>
+                  </configuration>
+              </plugin>
+
+              <plugin>
+                  <artifactId>maven-surefire-plugin</artifactId>
+                  <version>2.22.0</version>
+                  <configuration>
+                      <trimStackTrace>false</trimStackTrace>
+                      <argLine>-Xms256m -Xmx1550m</argLine>
+                      <runOrder>failedfirst</runOrder>
+                      <excludes>
+                          <exclude>**/*ConcurrencyTest.java</exclude>
+                          <exclude>**/Abstract*.java</exclude>
+                      </excludes>
+                      <useSystemClassLoader>false</useSystemClassLoader><!-- see https://stackoverflow.com/questions/53326285 -->
+                  </configuration>
+              </plugin>
+
+              <plugin>
+                  <groupId>org.apache.maven.plugins</groupId>
+                  <artifactId>maven-javadoc-plugin</artifactId>
+                  <version>3.0.1</version>
+                  <configuration>
+                      <bottom><![CDATA[&nbsp;]]></bottom>
+                      <excludePackageNames>org.languagetool.dev.conversion*</excludePackageNames>
+                      <!-- don't check javadoc <additionalJOption>-Xdoclint:none</additionalJOption> -->
+                  </configuration>
+              </plugin>
+
+              <plugin>
+                  <!-- License report: call `mvn license:third-party-report`, then see languagetool-standalone/target/site/third-party-report.html -->
+                  <groupId>org.codehaus.mojo</groupId>
+                  <artifactId>license-maven-plugin</artifactId>
+              </plugin>
+
+          </plugins>
+      </pluginManagement>
+  </build>
+
+  <distributionManagement>
+    <repository>
+      <id>community-release</id>
+      <url>dav:https://repository-languagetool.forge.cloudbees.com/release/</url>
+    </repository>
+    <snapshotRepository>
+      <id>community-snapshot</id>
+      <url>dav:https://repository-languagetool.forge.cloudbees.com/snapshot/</url>
+    </snapshotRepository>
+  </distributionManagement>
+
+  <profiles>
+    <!-- taken from https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven -->
+    <profile>
+      <id>release-sign-artifacts</id>
+      <activation>
+        <property>
+          <name>performRelease</name>
+          <value>true</value>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-gpg-plugin</artifactId>
+            <version>1.6</version>
+            <configuration>
+              <useAgent>true</useAgent>  
+            </configuration>
+            <executions>
+              <execution>
+                <id>sign-artifacts</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+    
+  <modules>
+    <module>languagetool-core</module>
+    <module>languagetool-language-modules/en</module>
+    <module>languagetool-language-modules/fa</module>
+    <module>languagetool-language-modules/fr</module>
+    <module>languagetool-language-modules/de</module>
+    <module>languagetool-language-modules/pl</module>
+    <module>languagetool-language-modules/ca</module>
+    <module>languagetool-language-modules/it</module>
+    <module>languagetool-language-modules/br</module>
+    <module>languagetool-language-modules/nl</module>
+    <module>languagetool-language-modules/pt</module>
+    <module>languagetool-language-modules/ru</module>
+    <module>languagetool-language-modules/ast</module>
+    <module>languagetool-language-modules/be</module>
+    <module>languagetool-language-modules/zh</module>
+    <module>languagetool-language-modules/da</module>
+    <module>languagetool-language-modules/eo</module>
+    <module>languagetool-language-modules/gl</module>
+    <module>languagetool-language-modules/el</module>
+    <module>languagetool-language-modules/is</module>
+    <module>languagetool-language-modules/ja</module>
+    <module>languagetool-language-modules/km</module>
+    <module>languagetool-language-modules/lt</module>
+    <module>languagetool-language-modules/ml</module>
+    <module>languagetool-language-modules/ro</module>
+    <module>languagetool-language-modules/sk</module>
+    <module>languagetool-language-modules/sl</module>
+    <!-- re-add when a maintainer is found: <module>languagetool-language-modules/sr</module>-->
+    <module>languagetool-language-modules/es</module>
+    <module>languagetool-language-modules/sv</module>
+    <module>languagetool-language-modules/ta</module>
+    <module>languagetool-language-modules/tl</module>
+    <module>languagetool-language-modules/uk</module>
+    <module>languagetool-language-modules/de-DE-x-simple-language</module>
+    <module>languagetool-language-modules/all</module>
+    <module>languagetool-gui-commons</module>
+    <module>languagetool-commandline</module>
+    <module>languagetool-standalone</module>
+    <module>languagetool-office-extension</module>
+    <module>languagetool-wikipedia</module>
+    <module>languagetool-server</module>
+    <module>languagetool-http-client</module>
+    <module>languagetool-tools</module>
+    <module>languagetool-dev</module>
+    <module>languagetool-rpm-package</module>
+    <!-- don't add languagetool-client-example here, it's built manually only -->
+  </modules>
+
+</project>
diff --git a/test/data/install_pom/test_any_not_final-want.xml b/test/data/install_pom/test_any_not_final-want.xml
new file mode 100644
index 00000000..0e34c3f9
--- /dev/null
+++ b/test/data/install_pom/test_any_not_final-want.xml
@@ -0,0 +1,24 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.fedoraproject.xmvn</groupId>
+  <artifactId>xmvn-resolve</artifactId>
+  <version>4.0.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>com.beust</groupId>
+      <artifactId>jcommander</artifactId>
+      <version>1.82</version>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-api</artifactId>
+      <version>4.0.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-core</artifactId>
+      <version>4.0.0</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_basic-want.xml b/test/data/install_pom/test_basic-want.xml
new file mode 100644
index 00000000..2b7ed5cd
--- /dev/null
+++ b/test/data/install_pom/test_basic-want.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>biz.aQute</groupId>
+  <artifactId>bndlib</artifactId>
+  <version>1.50.0</version>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_dep_classifier-want.xml b/test/data/install_pom/test_dep_classifier-want.xml
new file mode 100644
index 00000000..e78f92e6
--- /dev/null
+++ b/test/data/install_pom/test_dep_classifier-want.xml
@@ -0,0 +1,20 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.languagetool</groupId>
+  <artifactId>language-ja</artifactId>
+  <version>4.8</version>
+  <dependencies>
+    <dependency>
+      <groupId>org.languagetool</groupId>
+      <artifactId>languagetool-core</artifactId>
+      <version>4.8</version>
+    </dependency>
+    <dependency>
+      <groupId>com.github.lucene-gosen</groupId>
+      <artifactId>lucene-gosen</artifactId>
+      <version>6.2.1</version>
+      <classifier>ipadic</classifier>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_dep_type-want.xml b/test/data/install_pom/test_dep_type-want.xml
new file mode 100644
index 00000000..0074c18b
--- /dev/null
+++ b/test/data/install_pom/test_dep_type-want.xml
@@ -0,0 +1,65 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.languagetool</groupId>
+  <artifactId>languagetool-standalone</artifactId>
+  <version>4.8</version>
+  <dependencies>
+    <dependency>
+      <groupId>org.languagetool</groupId>
+      <artifactId>languagetool-core</artifactId>
+      <version>4.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.languagetool</groupId>
+      <artifactId>languagetool-gui-commons</artifactId>
+      <version>4.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.languagetool</groupId>
+      <artifactId>languagetool-commandline</artifactId>
+      <version>4.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.languagetool</groupId>
+      <artifactId>languagetool-server</artifactId>
+      <version>4.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.languagetool</groupId>
+      <artifactId>language-all</artifactId>
+      <version>4.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.languagetool</groupId>
+      <artifactId>languagetool-tools</artifactId>
+      <version>4.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-collections4</artifactId>
+      <version>4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.25</version>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+      <version>1.2.3</version>
+    </dependency>
+    <dependency>
+      <groupId>org.languagetool</groupId>
+      <artifactId>languagetool-core</artifactId>
+      <version>4.8</version>
+      <extension>test-jar</extension>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_interpolate_from_model-want.xml b/test/data/install_pom/test_interpolate_from_model-want.xml
new file mode 100644
index 00000000..7dd835c4
--- /dev/null
+++ b/test/data/install_pom/test_interpolate_from_model-want.xml
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>cglib</groupId>
+  <artifactId>cglib-integration-test</artifactId>
+  <version>3.3.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>cglib</groupId>
+      <artifactId>cglib</artifactId>
+      <version>3.3.0</version>
+    </dependency>
+    <dependency>
+      <groupId>cglib</groupId>
+      <artifactId>cglib-sample</artifactId>
+      <version>3.3.0</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_interpolate_from_parent-want.xml b/test/data/install_pom/test_interpolate_from_parent-want.xml
new file mode 100644
index 00000000..2f53c963
--- /dev/null
+++ b/test/data/install_pom/test_interpolate_from_parent-want.xml
@@ -0,0 +1,20 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>cglib</groupId>
+  <artifactId>cglib</artifactId>
+  <version>3.3.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>org.ow2.asm</groupId>
+      <artifactId>asm</artifactId>
+      <version>7.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ant</groupId>
+      <artifactId>ant</artifactId>
+      <version>1.10.3</version>
+      <optional>true</optional>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_packaging_pom-want.xml b/test/data/install_pom/test_packaging_pom-want.xml
new file mode 100644
index 00000000..79ad0972
--- /dev/null
+++ b/test/data/install_pom/test_packaging_pom-want.xml
@@ -0,0 +1,23 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>org.apache.commons</groupId>
+    <artifactId>commons-parent</artifactId>
+    <version>17</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>commons-io</groupId>
+  <artifactId>commons-io</artifactId>
+  <version>2</version>
+  <name>Commons Lang</name>
+  <packaging>pom</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>G</groupId>
+      <artifactId>G</artifactId>
+      <version>1000</version>
+    </dependency>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_packaging_pom_missing_version-want.xml b/test/data/install_pom/test_packaging_pom_missing_version-want.xml
new file mode 100644
index 00000000..f3f66652
--- /dev/null
+++ b/test/data/install_pom/test_packaging_pom_missing_version-want.xml
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.commons</groupId>
+  <groupId>commons-io</groupId>
+  <artifactId>commons-io</artifactId>
+  <name>Commons Lang</name>
+  <packaging>pom</packaging>
+
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_parent_chain-want.xml b/test/data/install_pom/test_parent_chain-want.xml
new file mode 100644
index 00000000..3fe9faf2
--- /dev/null
+++ b/test/data/install_pom/test_parent_chain-want.xml
@@ -0,0 +1,44 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.fedoraproject.xmvn</groupId>
+  <artifactId>xmvn-install</artifactId>
+  <version>4.0.0</version>
+  <dependencies>
+    <dependency>
+      <groupId>com.beust</groupId>
+      <artifactId>jcommander</artifactId>
+      <version>1.82</version>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-api</artifactId>
+      <version>4.0.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-core</artifactId>
+      <version>4.0.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>2.0.0-alpha7</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <version>2.0.0-alpha7</version>
+    </dependency>
+    <dependency>
+      <groupId>org.ow2.asm</groupId>
+      <artifactId>asm</artifactId>
+      <version>9.3</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-compress</artifactId>
+      <version>1.21</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_parent_install-want.xml b/test/data/install_pom/test_parent_install-want.xml
new file mode 100644
index 00000000..64931178
--- /dev/null
+++ b/test/data/install_pom/test_parent_install-want.xml
@@ -0,0 +1,245 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+      <groupId>org.sonatype.oss</groupId>
+      <artifactId>oss-parent</artifactId>
+      <version>7</version>
+    </parent>
+
+    
+    
+    
+    <groupId>cglib</groupId>
+    <artifactId>cglib-parent</artifactId>
+    <version>3.3.0</version>
+    <packaging>pom</packaging>
+
+    <name>Code Generation Library</name>
+    <url>https://github.com/cglib/cglib</url>
+    <description>cglib is a powerful, high performance and quality Code Generation Library, It is used to extend JAVA classes and implements interfaces at runtime.</description>
+
+    <scm>
+        <connection>scm:git:git://github.com/cglib/cglib.git</connection>
+        <developerConnection>scm:git:ssh://git@github.com/cglib/cglib.git</developerConnection>
+        <url>https://github.com/cglib/cglib</url>
+    </scm>
+
+    <issueManagement>
+        <system>Github Issues</system>
+        <url>https://github.com/cglib/cglib/issues</url>
+    </issueManagement>
+
+    <ciManagement>
+        <system>Travis</system>
+        <url>https://travis-ci.org/cglib/cglib</url>
+    </ciManagement>
+
+    <licenses>
+        <license>
+            <name>ASF 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    
+    
+    
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
+        <java.version.source>1.5</java.version.source>
+        <java.version.target>1.5</java.version.target>
+        <asm.version>7.1</asm.version>
+        <ant.version>1.10.3</ant.version>
+        <jmh.version>1.21</jmh.version>
+        <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
+        <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
+        <maven-javadoc-plugin.version>3.0.1</maven-javadoc-plugin.version>
+        <maven-jar-plugin.version>3.1.0</maven-jar-plugin.version>
+        <java.compiler.argument />
+
+        <java.test.compiler.argument>${java.compiler.argument}</java.test.compiler.argument>
+        <gpg.skip>true</gpg.skip>
+    </properties>
+
+    
+    
+    
+    <modules>
+        <module>cglib</module>
+        <module>cglib-nodep</module>
+        <module>cglib-sample</module>
+        <module>cglib-integration-test</module>
+        <module>cglib-jmh</module>
+    </modules>
+
+    
+    
+    
+    <profiles>
+        <profile>
+            <id>java8</id>
+            <activation>
+                <jdk>[1.8,)</jdk>
+            </activation>
+            <properties>
+                <java.test.compiler.argument>-parameters</java.test.compiler.argument>
+            </properties>
+        </profile>
+        <profile>
+            <id>java9</id>
+            <activation>
+                <jdk>[1.9,)</jdk>
+            </activation>
+            <properties>
+                <java.version.source>1.6</java.version.source>
+                <java.version.target>1.6</java.version.target>
+                <java.test.compiler.argument>-parameters</java.test.compiler.argument>
+            </properties>
+        </profile>
+    </profiles>
+
+    
+    
+    
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>${maven-compiler-plugin.version}</version>
+                    <configuration>
+                        <source>${java.version.source}</source>
+                        <target>${java.version.target}</target>
+                        <compilerArgument>${java.compiler.argument}</compilerArgument>
+                        <testSource>${java.specification.version}</testSource>
+                        <testTarget>${java.specification.version}</testTarget>
+                        <testCompilerArgument>${java.test.compiler.argument}</testCompilerArgument>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-surefire-plugin</artifactId>
+                    <version>2.21.0</version>
+                    <configuration>
+                        <systemProperties>
+                            <property>
+                                <name>net.sf.cglib.test.stressHashCodes</name>
+                                <value>true</value>
+                            </property>
+                        </systemProperties>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-failsafe-plugin</artifactId>
+                    <version>2.21.0</version>
+                    <configuration>
+                        <systemProperties>
+                            <property>
+                                <name>net.sf.cglib.test.stressHashCodes</name>
+                                <value>true</value>
+                            </property>
+                        </systemProperties>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-javadoc-plugin</artifactId>
+                    <version>${maven-javadoc-plugin.version}</version>
+                    <configuration>
+                      <quiet>true</quiet>
+                      <detectLinks>false</detectLinks>
+                      <detectOfflineLinks>false</detectOfflineLinks>
+                      
+                      <use>false</use>
+                      <doclint>none</doclint>
+                      <additionalDependencies>
+                        <additionalDependency>
+                          <groupId>org.ow2.asm</groupId>
+                          <artifactId>asm</artifactId>
+                          <version>${asm.version}</version>
+                        </additionalDependency>
+                        <additionalDependency>
+                          <groupId>org.apache.ant</groupId>
+                          <artifactId>ant</artifactId>
+                          <version>${ant.version}</version>
+                        </additionalDependency>
+                      </additionalDependencies>
+                    </configuration>
+                    <executions>
+                      <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                          <goal>jar</goal>
+                        </goals>
+                      </execution>
+                    </executions>
+                </plugin>
+                <plugin>
+                    <groupId>org.sonatype.plugins</groupId>
+                    <artifactId>jarjar-maven-plugin</artifactId>
+                    <version>1.9</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <plugins>
+            <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-gpg-plugin</artifactId>
+              <version>1.6</version>
+              <executions>
+              <execution>
+                <id>sign-artifacts</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+    </build>
+
+    
+    
+    
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>cglib</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>cglib-sample</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.ow2.asm</groupId>
+                <artifactId>asm</artifactId>
+                <version>${asm.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.ant</groupId>
+                <artifactId>ant</artifactId>
+                <version>${ant.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+                <version>4.12</version>
+                <scope>test</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_parent_relpath-want.xml b/test/data/install_pom/test_parent_relpath-want.xml
new file mode 100644
index 00000000..98a5c980
--- /dev/null
+++ b/test/data/install_pom/test_parent_relpath-want.xml
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.fedoraproject.xmvn</groupId>
+  <artifactId>xmvn-mojo</artifactId>
+  <version>4.0.0</version>
+  <packaging>maven-plugin</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-api</artifactId>
+      <version>4.0.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-core</artifactId>
+      <version>4.0.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-util</artifactId>
+      <version>1.8.1</version>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/test_parent_version-want.xml b/test/data/install_pom/test_parent_version-want.xml
new file mode 100644
index 00000000..4f5734e6
--- /dev/null
+++ b/test/data/install_pom/test_parent_version-want.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<project xmlns="http://maven.apache.org/POM/4.0.0">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>g</groupId>
+  <artifactId>a</artifactId>
+  <version>1</version>
+</project>
\ No newline at end of file
diff --git a/test/data/install_pom/xmvn/xmvn-mojo/pom.xml b/test/data/install_pom/xmvn/xmvn-mojo/pom.xml
new file mode 100644
index 00000000..c73f92a7
--- /dev/null
+++ b/test/data/install_pom/xmvn/xmvn-mojo/pom.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!--
+ ! Copyright (c) 2012-2021 Red Hat, Inc.
+ !
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! You may obtain a copy of the License at
+ !
+ !     http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ `-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>xmvn-parent</artifactId>
+    <groupId>org.fedoraproject.xmvn</groupId>
+    <version>4.0.0</version>
+    <relativePath>../xmvn-parent</relativePath>
+  </parent>
+  <artifactId>xmvn-mojo</artifactId>
+  <packaging>maven-plugin</packaging>
+  <name>XMvn MOJO</name>
+  <description>
+    XMvn MOJO is a Maven plugin, which consists of several MOJOs.
+    Some goals of these MOJOs are intended to be attached to default
+    Maven lifecycle when building packages, others can be called
+    directly from Maven command line.
+  </description>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-artifact</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-model</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-classworlds</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugin-tools</groupId>
+      <artifactId>maven-plugin-annotations</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-core</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-container-default</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-util</artifactId>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>mojo-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+          <requirements>
+            <maven>3.0</maven>
+          </requirements>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/test/data/install_pom/xmvn/xmvn-parent/pom.xml b/test/data/install_pom/xmvn/xmvn-parent/pom.xml
new file mode 100644
index 00000000..030923f9
--- /dev/null
+++ b/test/data/install_pom/xmvn/xmvn-parent/pom.xml
@@ -0,0 +1,585 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!--
+ ! Copyright (c) 2012-2021 Red Hat, Inc.
+ !
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! You may obtain a copy of the License at
+ !
+ !     http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ `-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.fedoraproject.xmvn</groupId>
+  <artifactId>xmvn-parent</artifactId>
+  <version>4.0.0</version>
+  <packaging>pom</packaging>
+  <name>XMvn Parent</name>
+  <description>
+    XMvn Parent is project model from which all other XMvn modules are
+    inheriting.  It defines settings common to all XMvn modules.
+  </description>
+  <url>https://fedora-java.github.io/xmvn/</url>
+  <inceptionYear>2012</inceptionYear>
+  <organization>
+    <name>Red Hat, Inc.</name>
+    <url>http://www.redhat.com/</url>
+  </organization>
+  <licenses>
+    <license>
+      <name>Apache License Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+    </license>
+  </licenses>
+  <developers>
+    <developer>
+      <id>mizdebsk</id>
+      <name>Mikolaj Izdebski</name>
+      <email>mizdebsk@redhat.com</email>
+      <organization>Red Hat, Inc.</organization>
+      <organizationUrl>http://www.redhat.com/</organizationUrl>
+      <timezone>+1</timezone>
+    </developer>
+  </developers>
+  <mailingLists>
+    <mailingList>
+      <name>Fedora Java development List</name>
+      <post>java-devel@lists.fedoraproject.org</post>
+      <archive>http://lists.fedoraproject.org/pipermail/java-devel/</archive>
+      <subscribe>https://admin.fedoraproject.org/mailman/listinfo/java-devel</subscribe>
+      <unsubscribe>https://admin.fedoraproject.org/mailman/listinfo/java-devel</unsubscribe>
+    </mailingList>
+  </mailingLists>
+  <scm>
+    <url>https://github.com/fedora-java/xmvn</url>
+    <connection>scm:git:https://github.com/fedora-java/xmvn.git</connection>
+    <developerConnection>scm:git:git@github.com:fedora-java/xmvn.git</developerConnection>
+  </scm>
+  <issueManagement>
+    <system>Github</system>
+    <url>https://github.com/fedora-java/xmvn/issues/</url>
+  </issueManagement>
+  <distributionManagement>
+    <snapshotRepository>
+      <id>ossrh</id>
+      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+    </snapshotRepository>
+  </distributionManagement>
+  <properties>
+    <project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
+
+    <asmVersion>9.3</asmVersion>
+    <jcommanderVersion>1.82</jcommanderVersion>
+    <mavenInvokerVersion>3.2.0</mavenInvokerVersion>
+    <mavenResolverVersion>1.8.1</mavenResolverVersion>
+    <mavenVersion>3.8.6</mavenVersion>
+    <plexusClassworldsVersion>2.6.0</plexusClassworldsVersion>
+    <plexusUtilsVersion>3.4.2</plexusUtilsVersion>
+    <pluginToolsVersion>3.6.4</pluginToolsVersion>
+    <slf4jVersion>2.0.0-alpha7</slf4jVersion>
+    <commonsCompressVersion>1.21</commonsCompressVersion>
+
+    <!-- Build dependencies -->
+    <apivizVersion>1.3.2.GA</apivizVersion>
+    <assemblyPluginVersion>3.3.0</assemblyPluginVersion>
+    <buildHelperPluginVersion>3.3.0</buildHelperPluginVersion>
+    <checkstyleVersion>9.3</checkstyleVersion>
+    <checkstylePluginVersion>3.1.2</checkstylePluginVersion>
+    <cleanPluginVersion>3.2.0</cleanPluginVersion>
+    <compilerPluginVersion>3.10.1</compilerPluginVersion>
+    <dependencyPluginVersion>3.3.0</dependencyPluginVersion>
+    <deployPluginVersion>3.0.0-M2</deployPluginVersion>
+    <easymockVersion>4.3</easymockVersion>
+    <gpgPluginVersion>3.0.1</gpgPluginVersion>
+    <installPluginVersion>3.0.0-M1</installPluginVersion>
+    <jacocoVersion>0.8.8</jacocoVersion>
+    <jarPluginVersion>3.2.2</jarPluginVersion>
+    <javadocPluginVersion>3.4.0</javadocPluginVersion>
+    <junitVersion>5.8.2</junitVersion>
+    <jxrPluginVersion>2.3</jxrPluginVersion>
+    <mavenWagonVersion>1.0</mavenWagonVersion>
+    <modelloVersion>2.0.0</modelloVersion>
+    <nexusStagingPluginVersion>1.6.13</nexusStagingPluginVersion>
+    <pmdPluginVersion>3.0.1</pmdPluginVersion>
+    <projectInfoReportsPluginVersion>3.0.0</projectInfoReportsPluginVersion>
+    <plexusVersion>2.1.1</plexusVersion>
+    <ratPluginVersion>0.14</ratPluginVersion>
+    <resourcesPluginVersion>3.2.0</resourcesPluginVersion>
+    <sitePluginVersion>3.12.0</sitePluginVersion>
+    <sourcePluginVersion>3.2.1</sourcePluginVersion>
+    <surefireVersion>3.0.0-M7</surefireVersion>
+    <xmlunitVersion>2.9.0</xmlunitVersion>
+
+  </properties>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.apache.maven</groupId>
+        <artifactId>maven-artifact</artifactId>
+        <version>${mavenVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven</groupId>
+        <artifactId>maven-core</artifactId>
+        <version>${mavenVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven</groupId>
+        <artifactId>maven-model</artifactId>
+        <version>${mavenVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven</groupId>
+        <artifactId>maven-model-builder</artifactId>
+        <version>${mavenVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven</groupId>
+        <artifactId>maven-plugin-api</artifactId>
+        <version>${mavenVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-api</artifactId>
+        <version>${mavenResolverVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-util</artifactId>
+        <version>${mavenResolverVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven.plugin-tools</groupId>
+        <artifactId>maven-plugin-annotations</artifactId>
+        <version>${pluginToolsVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-classworlds</artifactId>
+        <version>${plexusClassworldsVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-utils</artifactId>
+        <version>${plexusUtilsVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.fedoraproject.xmvn</groupId>
+        <artifactId>xmvn-api</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.fedoraproject.xmvn</groupId>
+        <artifactId>xmvn-core</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.fedoraproject.xmvn</groupId>
+        <artifactId>xmvn-connector</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.fedoraproject.xmvn</groupId>
+        <artifactId>xmvn-install</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.fedoraproject.xmvn</groupId>
+        <artifactId>xmvn-resolve</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.fedoraproject.xmvn</groupId>
+        <artifactId>xmvn-subst</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.fedoraproject.xmvn</groupId>
+        <artifactId>xmvn-it</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter</artifactId>
+        <version>${junitVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.xmlunit</groupId>
+        <artifactId>xmlunit-assertj3</artifactId>
+        <version>${xmlunitVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.easymock</groupId>
+        <artifactId>easymock</artifactId>
+        <version>${easymockVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>com.beust</groupId>
+        <artifactId>jcommander</artifactId>
+        <version>${jcommanderVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.maven.shared</groupId>
+        <artifactId>maven-invoker</artifactId>
+        <version>${mavenInvokerVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <version>${slf4jVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-simple</artifactId>
+        <version>${slf4jVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.ow2.asm</groupId>
+        <artifactId>asm</artifactId>
+        <version>${asmVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-component-annotations</artifactId>
+        <version>${plexusVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-container-default</artifactId>
+        <version>${plexusVersion}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-compress</artifactId>
+        <version>${commonsCompressVersion}</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <dependencies>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.xmlunit</groupId>
+      <artifactId>xmlunit-assertj3</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>build-helper-maven-plugin</artifactId>
+          <version>${buildHelperPluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>${compilerPluginVersion}</version>
+          <configuration>
+            <source>1.8</source>
+            <target>1.8</target>
+          </configuration>
+        </plugin>
+        <plugin>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>${sitePluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-dependency-plugin</artifactId>
+          <version>${dependencyPluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-plugin-plugin</artifactId>
+          <version>${pluginToolsVersion}</version>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.modello</groupId>
+          <artifactId>modello-maven-plugin</artifactId>
+          <version>${modelloVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-assembly-plugin</artifactId>
+          <version>${assemblyPluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>${cleanPluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>${deployPluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>${installPluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>${jarPluginVersion}</version>
+          <configuration>
+            <skipIfEmpty>true</skipIfEmpty>
+          </configuration>
+        </plugin>
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>${resourcesPluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>${surefireVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-checkstyle-plugin</artifactId>
+          <version>${checkstylePluginVersion}</version>
+          <dependencies>
+            <dependency>
+              <groupId>com.puppycrawl.tools</groupId>
+              <artifactId>checkstyle</artifactId>
+              <version>${checkstyleVersion}</version>
+            </dependency>
+          </dependencies>
+          <configuration>
+            <sourceDirectories>
+              <sourceDirectory>src/main/java</sourceDirectory>
+            </sourceDirectories>
+            <includeTestSourceDirectory>true</includeTestSourceDirectory>
+            <configLocation>../aux/checkstyle.xml</configLocation>
+            <suppressionsLocation>../aux/checkstyle-suppressions.xml</suppressionsLocation>
+            <headerLocation>../aux/license-header.txt</headerLocation>
+            <excludes>**/package-info.java</excludes>
+            <logViolationCountToConsole>false</logViolationCountToConsole>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <version>${ratPluginVersion}</version>
+          <configuration>
+            <excludes>
+              <exclude>src/test/resources/**</exclude>
+            </excludes>
+          </configuration>
+        </plugin>
+        <plugin>
+          <artifactId>maven-javadoc-plugin</artifactId>
+          <version>${javadocPluginVersion}</version>
+          <configuration>
+            <!-- Code generated by Modello causes doclint errors -->
+            <doclint>none</doclint>
+          </configuration>
+        </plugin>
+        <plugin>
+          <artifactId>maven-source-plugin</artifactId>
+          <version>${sourcePluginVersion}</version>
+        </plugin>
+        <plugin>
+          <artifactId>maven-gpg-plugin</artifactId>
+          <version>${gpgPluginVersion}</version>
+        </plugin>
+        <plugin>
+          <groupId>org.sonatype.plugins</groupId>
+          <artifactId>nexus-staging-maven-plugin</artifactId>
+          <version>${nexusStagingPluginVersion}</version>
+          <configuration>
+            <serverId>ossrh</serverId>
+            <nexusUrl>https://oss.sonatype.org/</nexusUrl>
+            <autoReleaseAfterClose>false</autoReleaseAfterClose>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.jacoco</groupId>
+          <artifactId>jacoco-maven-plugin</artifactId>
+          <version>${jacocoVersion}</version>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.plexus</groupId>
+          <artifactId>plexus-component-metadata</artifactId>
+          <version>${plexusVersion}</version>
+          <executions>
+            <execution>
+              <goals>
+                <goal>generate-metadata</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+  <profiles>
+    <profile>
+      <id>quality</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-checkstyle-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>checkstyle-check</id>
+                <goals>
+                  <goal>check</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.jacoco</groupId>
+            <artifactId>jacoco-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>prepare-agent</goal>
+                </goals>
+              </execution>
+              <execution>
+                <id>jacoco-report</id>
+                <phase>post-integration-test</phase>
+                <goals>
+                  <goal>report</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>release</id>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-assembly-plugin</artifactId>
+            <dependencies>
+              <dependency>
+                <groupId>org.apache.apache.resources</groupId>
+                <artifactId>apache-source-release-assembly-descriptor</artifactId>
+                <version>1.0.6</version>
+              </dependency>
+            </dependencies>
+            <executions>
+              <execution>
+                <id>source-release-assembly</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>single</goal>
+                </goals>
+                <configuration>
+                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
+                  <descriptorRefs>
+                    <descriptorRef>source-release</descriptorRef>
+                  </descriptorRefs>
+                  <tarLongFileMode>gnu</tarLongFileMode>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>maven-javadoc-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-javadoc</id>
+                <goals>
+                  <goal>jar</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>maven-source-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-sources</id>
+                <goals>
+                  <goal>jar-no-fork</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>maven-gpg-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>sign-artifacts</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.sonatype.plugins</groupId>
+            <artifactId>nexus-staging-maven-plugin</artifactId>
+            <extensions>true</extensions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.rat</groupId>
+            <artifactId>apache-rat-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>rat-check</id>
+                <goals>
+                  <goal>check</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>maven-site-plugin</artifactId>
+            <configuration>
+              <skip>true</skip>
+              <skipDeploy>true</skipDeploy>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>jdk9+</id>
+      <activation>
+        <jdk>[9,)</jdk>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-compiler-plugin</artifactId>
+            <configuration>
+              <release>8</release>
+            </configuration>
+          </plugin>
+          <plugin>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <argLine>--add-opens java.base/java.lang=ALL-UNNAMED</argLine>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git a/test/data/install_pom/xmvn/xmvn-tools/pom.xml b/test/data/install_pom/xmvn/xmvn-tools/pom.xml
new file mode 100644
index 00000000..43abc443
--- /dev/null
+++ b/test/data/install_pom/xmvn/xmvn-tools/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!--
+ ! Copyright (c) 2012-2021 Red Hat, Inc.
+ !
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! You may obtain a copy of the License at
+ !
+ !     http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ `-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>xmvn-parent</artifactId>
+    <groupId>org.fedoraproject.xmvn</groupId>
+    <version>4.0.0</version>
+    <relativePath>../xmvn-parent</relativePath>
+  </parent>
+  <artifactId>xmvn-tools</artifactId>
+  <packaging>pom</packaging>
+  <name>XMvn Tools</name>
+  <description>
+    XMvn Tools is parent POM for all XMvn tools.  It holds
+    configuration common to all XMvn tools.
+  </description>
+  <modules>
+    <module>xmvn-resolve</module>
+    <module>xmvn-subst</module>
+    <module>xmvn-install</module>
+  </modules>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>${jarPluginVersion}</version>
+          <configuration>
+            <archive>
+              <manifest>
+                <addClasspath>true</addClasspath>
+                <mainClass>${mainClass}</mainClass>
+              </manifest>
+            </archive>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/test/data/install_pom/xmvn/xmvn-tools/xmvn-install/pom.xml b/test/data/install_pom/xmvn/xmvn-tools/xmvn-install/pom.xml
new file mode 100644
index 00000000..8c423069
--- /dev/null
+++ b/test/data/install_pom/xmvn/xmvn-tools/xmvn-install/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<!--
+ ! Copyright (c) 2013-2021 Red Hat, Inc.
+ !
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! You may obtain a copy of the License at
+ !
+ !     http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ `-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.fedoraproject.xmvn</groupId>
+    <artifactId>xmvn-tools</artifactId>
+    <version>4.0.0</version>
+  </parent>
+  <artifactId>xmvn-install</artifactId>
+  <name>XMvn Install</name>
+  <description>
+    XMvn Install is a command-line interface to XMvn installer.  The
+    installer reads reactor metadata and performs artifact
+    installation according to specified configuration.
+  </description>
+  <properties>
+    <mainClass>org.fedoraproject.xmvn.tools.install.cli.InstallerCli</mainClass>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>com.beust</groupId>
+      <artifactId>jcommander</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-core</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ow2.asm</groupId>
+      <artifactId>asm</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-compress</artifactId>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/test/data/install_pom/xmvn/xmvn-tools/xmvn-resolve/pom.xml b/test/data/install_pom/xmvn/xmvn-tools/xmvn-resolve/pom.xml
new file mode 100644
index 00000000..8cabc13f
--- /dev/null
+++ b/test/data/install_pom/xmvn/xmvn-tools/xmvn-resolve/pom.xml
@@ -0,0 +1,51 @@
+<?xml version='1.0' encoding='US-ASCII'?>
+<!--
+ ! Copyright (c) 2012-2021 Red Hat, Inc.
+ !
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! You may obtain a copy of the License at
+ !
+ !     http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ `--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0                              http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>xmvn-tools</artifactId>
+    <groupId>org.fedoraproject.xmvn</groupId>
+    <version>4.0.0</version>
+    <relativePath>..</relativePath>
+  </parent>
+  <artifactId>xmvn-resolve</artifactId>
+  <name>XMvn Resolver</name>
+  <description>
+    XMvn Resolver is a very simple commald-line tool to resolve Maven
+    artifacts from system repositories.  Basically it's just an
+    interface to artifact resolution mechanism implemented by XMvn
+    Core.  The primary intended use case of XMvn Resolver is debugging
+    local artifact repositories.
+  </description>
+  <properties>
+    <mainClass>org.fedoraproject.xmvn.tools.resolve.ResolverCli</mainClass>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>com.beust</groupId>
+      <artifactId>jcommander</artifactId>
+    <version>any</version></dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-api</artifactId>
+    <version>any</version></dependency>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-core</artifactId>
+      <scope>runtime</scope>
+    <version>any</version></dependency>
+  </dependencies>
+</project>
diff --git a/test/data/maven_depmap/JPP-depmngmnt.pom b/test/data/maven_depmap/JPP-depmngmnt.pom
new file mode 100644
index 00000000..ec86bb3d
--- /dev/null
+++ b/test/data/maven_depmap/JPP-depmngmnt.pom
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.fedoraproject.xmvn</groupId>
+  <version>4.0.0</version>
+  <artifactId>xmvn-subst</artifactId>
+  <name>XMvn Subst</name>
+  <description>
+    XMvn Subst is a tool that can substitute Maven artifact files with
+    symbolic links to corresponding files in artifact repository.
+  </description>
+  <properties>
+    <jcommanderVersion>1.82</jcommanderVersion>
+  </properties>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>com.beust</groupId>
+        <artifactId>jcommander</artifactId>
+        <version>${jcommanderVersion}</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <dependencies>
+    <dependency>
+      <groupId>com.beust</groupId>
+      <artifactId>jcommander</artifactId>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/test/data/maven_depmap/JPP-modelexpansion.pom b/test/data/maven_depmap/JPP-modelexpansion.pom
new file mode 100644
index 00000000..3feced96
--- /dev/null
+++ b/test/data/maven_depmap/JPP-modelexpansion.pom
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="US-ASCII"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.fedoraproject.xmvn</groupId>
+  <version>4.0.0</version>
+  <artifactId>xmvn-subst</artifactId>
+  <name>XMvn Subst</name>
+  <description>
+    XMvn Subst is a tool that can substitute Maven artifact files with
+    symbolic links to corresponding files in artifact repository.
+  </description>
+  <properties>
+    <jcommanderVersion>1.82</jcommanderVersion>
+  </properties>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.fedoraproject.xmvn</groupId>
+        <artifactId>xmvn-api</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <dependencies>
+    <dependency>
+      <groupId>org.fedoraproject.xmvn</groupId>
+      <artifactId>xmvn-api</artifactId>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/test/data/maven_depmap/test_alias_extension-want.xml b/test/data/maven_depmap/test_alias_extension-want.xml
index 6b0d1aee..d502fdf8 100644
--- a/test/data/maven_depmap/test_alias_extension-want.xml
+++ b/test/data/maven_depmap/test_alias_extension-want.xml
@@ -13,9 +13,6 @@
              </ns1:alias>
          </ns1:aliases>
          <ns1:path>%s/usr/share/java/commons-io.jar</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
       <ns1:artifact>
          <ns1:groupId>alias</ns1:groupId>
@@ -30,9 +27,6 @@
              </ns1:alias>
          </ns1:aliases>
          <ns1:path>%s/JPP-alias.pom</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_append-want.xml b/test/data/maven_depmap/test_append-want.xml
index 65d420e6..0ca20911 100644
--- a/test/data/maven_depmap/test_append-want.xml
+++ b/test/data/maven_depmap/test_append-want.xml
@@ -12,9 +12,6 @@
                <ns1:artifactId>y</ns1:artifactId>
             </ns1:alias>
          </ns1:aliases>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_append_and_namespace-want.xml b/test/data/maven_depmap/test_append_and_namespace-want.xml
index 88b1f816..368863bf 100644
--- a/test/data/maven_depmap/test_append_and_namespace-want.xml
+++ b/test/data/maven_depmap/test_append_and_namespace-want.xml
@@ -13,9 +13,6 @@
                <ns1:artifactId>y</ns1:artifactId>
             </ns1:alias>
          </ns1:aliases>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_basic-want.xml b/test/data/maven_depmap/test_basic-want.xml
index 540f076a..200044bf 100644
--- a/test/data/maven_depmap/test_basic-want.xml
+++ b/test/data/maven_depmap/test_basic-want.xml
@@ -6,9 +6,6 @@
          <ns1:artifactId>bndlib</ns1:artifactId>
          <ns1:version>1.50.0</ns1:version>
          <ns1:path>%s/usr/share/java/bndlib.jar</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
       <ns1:artifact>
          <ns1:groupId>biz.aQute</ns1:groupId>
@@ -16,9 +13,6 @@
          <ns1:extension>pom</ns1:extension>
          <ns1:version>1.50.0</ns1:version>
          <ns1:path>%s/JPP-bndlib.pom</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_buildroot-want.xml b/test/data/maven_depmap/test_buildroot-want.xml
index 604046a5..9fa588d4 100644
--- a/test/data/maven_depmap/test_buildroot-want.xml
+++ b/test/data/maven_depmap/test_buildroot-want.xml
@@ -7,9 +7,6 @@
          <ns1:version>17</ns1:version>
          <ns1:extension>war</ns1:extension>
          <ns1:path>%s/usr/share/java/commons-war.war</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
       <ns1:artifact>
          <ns1:groupId>commons</ns1:groupId>
@@ -17,9 +14,6 @@
          <ns1:version>17</ns1:version>
          <ns1:extension>pom</ns1:extension>
          <ns1:path>/usr/share/maven-poms/JPP-commons-war.pom</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_classifier-want.xml b/test/data/maven_depmap/test_classifier-want.xml
index 6a6f74ae..8fa90b01 100644
--- a/test/data/maven_depmap/test_classifier-want.xml
+++ b/test/data/maven_depmap/test_classifier-want.xml
@@ -14,9 +14,6 @@
                <ns1:classifier>c</ns1:classifier>
             </ns1:alias>
          </ns1:aliases>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_expansion-want.xml b/test/data/maven_depmap/test_expansion-want.xml
new file mode 100644
index 00000000..10c34449
--- /dev/null
+++ b/test/data/maven_depmap/test_expansion-want.xml
@@ -0,0 +1,35 @@
+<ns0:metadata xmlns:ns0="http://fedorahosted.org/xmvn/METADATA/2.3.0">
+  <ns0:artifacts>
+    <ns0:artifact>
+      <ns0:groupId>org.fedoraproject.xmvn</ns0:groupId>
+      <ns0:artifactId>xmvn-subst</ns0:artifactId>
+      <ns0:version>4.0.0</ns0:version>
+      <ns0:path>%s/usr/share/java/depmngmnt.jar</ns0:path>
+      <ns0:dependencies>
+        <ns0:dependency>
+          <ns0:groupId>com.beust</ns0:groupId>
+          <ns0:artifactId>jcommander</ns0:artifactId>
+          <ns0:extension>jar</ns0:extension>
+          <ns0:optional>false</ns0:optional>
+          <ns0:requestedVersion>1.82</ns0:requestedVersion>
+        </ns0:dependency>
+      </ns0:dependencies>
+    </ns0:artifact>
+    <ns0:artifact>
+      <ns0:groupId>org.fedoraproject.xmvn</ns0:groupId>
+      <ns0:artifactId>xmvn-subst</ns0:artifactId>
+      <ns0:extension>pom</ns0:extension>
+      <ns0:version>4.0.0</ns0:version>
+      <ns0:path>%s/JPP-depmngmnt.pom</ns0:path>
+      <ns0:dependencies>
+        <ns0:dependency>
+          <ns0:groupId>com.beust</ns0:groupId>
+          <ns0:artifactId>jcommander</ns0:artifactId>
+          <ns0:extension>jar</ns0:extension>
+          <ns0:optional>false</ns0:optional>
+          <ns0:requestedVersion>1.82</ns0:requestedVersion>
+        </ns0:dependency>
+      </ns0:dependencies>
+    </ns0:artifact>
+  </ns0:artifacts>
+</ns0:metadata>
diff --git a/test/data/maven_depmap/test_expansion_model-want.xml b/test/data/maven_depmap/test_expansion_model-want.xml
new file mode 100644
index 00000000..6237358c
--- /dev/null
+++ b/test/data/maven_depmap/test_expansion_model-want.xml
@@ -0,0 +1,35 @@
+<ns0:metadata xmlns:ns0="http://fedorahosted.org/xmvn/METADATA/2.3.0">
+  <ns0:artifacts>
+    <ns0:artifact>
+      <ns0:groupId>org.fedoraproject.xmvn</ns0:groupId>
+      <ns0:artifactId>xmvn-subst</ns0:artifactId>
+      <ns0:version>4.0.0</ns0:version>
+      <ns0:path>%s/usr/share/java/depmngmnt.jar</ns0:path>
+      <ns0:dependencies>
+        <ns0:dependency>
+          <ns0:groupId>org.fedoraproject.xmvn</ns0:groupId>
+          <ns0:artifactId>xmvn-api</ns0:artifactId>
+          <ns0:extension>jar</ns0:extension>
+          <ns0:optional>false</ns0:optional>
+          <ns0:requestedVersion>4.0.0</ns0:requestedVersion>
+        </ns0:dependency>
+      </ns0:dependencies>
+    </ns0:artifact>
+    <ns0:artifact>
+      <ns0:groupId>org.fedoraproject.xmvn</ns0:groupId>
+      <ns0:artifactId>xmvn-subst</ns0:artifactId>
+      <ns0:extension>pom</ns0:extension>
+      <ns0:version>4.0.0</ns0:version>
+      <ns0:path>%s/JPP-modelexpansion.pom</ns0:path>
+      <ns0:dependencies>
+        <ns0:dependency>
+          <ns0:groupId>org.fedoraproject.xmvn</ns0:groupId>
+          <ns0:artifactId>xmvn-api</ns0:artifactId>
+          <ns0:extension>jar</ns0:extension>
+          <ns0:optional>false</ns0:optional>
+          <ns0:requestedVersion>4.0.0</ns0:requestedVersion>
+        </ns0:dependency>
+      </ns0:dependencies>
+    </ns0:artifact>
+  </ns0:artifacts>
+</ns0:metadata>
diff --git a/test/data/maven_depmap/test_mvn_spec-want.xml b/test/data/maven_depmap/test_mvn_spec-want.xml
index d2c03ec7..dd49eb83 100644
--- a/test/data/maven_depmap/test_mvn_spec-want.xml
+++ b/test/data/maven_depmap/test_mvn_spec-want.xml
@@ -6,9 +6,6 @@
          <ns1:artifactId>b</ns1:artifactId>
          <ns1:version>12</ns1:version>
          <ns1:path>%s/usr/share/java/commons-io.jar</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_mvn_spec_buildroot-want.xml b/test/data/maven_depmap/test_mvn_spec_buildroot-want.xml
index 0f7dcd5f..0efeddb8 100644
--- a/test/data/maven_depmap/test_mvn_spec_buildroot-want.xml
+++ b/test/data/maven_depmap/test_mvn_spec_buildroot-want.xml
@@ -7,9 +7,6 @@
          <ns1:version>1</ns1:version>
          <ns1:extension>war</ns1:extension>
          <ns1:path>%s/usr/share/java/commons-war.war</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_mvn_spec_war-want.xml b/test/data/maven_depmap/test_mvn_spec_war-want.xml
index deae16ff..1dde1a95 100644
--- a/test/data/maven_depmap/test_mvn_spec_war-want.xml
+++ b/test/data/maven_depmap/test_mvn_spec_war-want.xml
@@ -7,9 +7,6 @@
          <ns1:extension>war</ns1:extension>
          <ns1:version>1</ns1:version>
          <ns1:path>%s/usr/share/java/commons-war.war</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_namespace-want.xml b/test/data/maven_depmap/test_namespace-want.xml
index da36a475..adf5b2cc 100644
--- a/test/data/maven_depmap/test_namespace-want.xml
+++ b/test/data/maven_depmap/test_namespace-want.xml
@@ -7,9 +7,6 @@
          <ns1:version>12</ns1:version>
          <ns1:path>%s/usr/share/java/commons-io.jar</ns1:path>
          <ns1:namespace>myns</ns1:namespace>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_version-want.xml b/test/data/maven_depmap/test_version-want.xml
index 06e02bc8..297d0ca9 100644
--- a/test/data/maven_depmap/test_version-want.xml
+++ b/test/data/maven_depmap/test_version-want.xml
@@ -11,9 +11,6 @@
             <ns1:version>2</ns1:version>
             <ns1:version>3</ns1:version>
          </ns1:compatVersions>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_version_append-want.xml b/test/data/maven_depmap/test_version_append-want.xml
index 33e688cd..028ad54f 100644
--- a/test/data/maven_depmap/test_version_append-want.xml
+++ b/test/data/maven_depmap/test_version_append-want.xml
@@ -17,9 +17,6 @@
                <ns1:artifactId>b</ns1:artifactId>
             </ns1:alias>
          </ns1:aliases>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_version_namespace-want.xml b/test/data/maven_depmap/test_version_namespace-want.xml
index 65e331a5..958725d2 100644
--- a/test/data/maven_depmap/test_version_namespace-want.xml
+++ b/test/data/maven_depmap/test_version_namespace-want.xml
@@ -18,9 +18,6 @@
                <ns1:artifactId>b</ns1:artifactId>
             </ns1:alias>
          </ns1:aliases>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_versioned-want.xml b/test/data/maven_depmap/test_versioned-want.xml
index 8885ff1a..981ba85c 100644
--- a/test/data/maven_depmap/test_versioned-want.xml
+++ b/test/data/maven_depmap/test_versioned-want.xml
@@ -10,9 +10,6 @@
             <ns1:version>2.0.0</ns1:version>
         </ns1:compatVersions>
          <ns1:path>%s/usr/share/java/versioned-2.0.0.war</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_versioned2-want.xml b/test/data/maven_depmap/test_versioned2-want.xml
index ea1b24cf..e94fed23 100644
--- a/test/data/maven_depmap/test_versioned2-want.xml
+++ b/test/data/maven_depmap/test_versioned2-want.xml
@@ -9,9 +9,6 @@
             <ns1:version>1.2</ns1:version>
         </ns1:compatVersions>
          <ns1:path>%s/usr/share/java/versioned2-1.2.jar</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_versioned_classifier-want.xml b/test/data/maven_depmap/test_versioned_classifier-want.xml
index c3891caa..d2aca331 100644
--- a/test/data/maven_depmap/test_versioned_classifier-want.xml
+++ b/test/data/maven_depmap/test_versioned_classifier-want.xml
@@ -11,9 +11,6 @@
             <ns1:version>1.2</ns1:version>
          </ns1:compatVersions>
          <ns1:path>%s/usr/share/java/versioned-3-tests-1.jar</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_versioned_with_pom-want.xml b/test/data/maven_depmap/test_versioned_with_pom-want.xml
index c2b344e1..8d259ab9 100644
--- a/test/data/maven_depmap/test_versioned_with_pom-want.xml
+++ b/test/data/maven_depmap/test_versioned_with_pom-want.xml
@@ -9,9 +9,6 @@
             <ns1:version>2013.10</ns1:version>
          </ns1:compatVersions>
          <ns1:path>%s/usr/share/java/testversioned-2013.10.jar</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
       <ns1:artifact>
          <ns1:groupId>alias</ns1:groupId>
@@ -22,9 +19,6 @@
             <ns1:version>2013.10</ns1:version>
          </ns1:compatVersions>
          <ns1:path>%s/JPP-testversioned-2013.10.pom</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/test_war-want.xml b/test/data/maven_depmap/test_war-want.xml
index cac27a84..e8e2e56b 100644
--- a/test/data/maven_depmap/test_war-want.xml
+++ b/test/data/maven_depmap/test_war-want.xml
@@ -7,9 +7,6 @@
          <ns1:version>17</ns1:version>
          <ns1:extension>war</ns1:extension>
          <ns1:path>%s/usr/share/java/commons-war.war</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
       <ns1:artifact>
          <ns1:groupId>commons</ns1:groupId>
@@ -17,9 +14,6 @@
          <ns1:extension>pom</ns1:extension>
          <ns1:version>17</ns1:version>
          <ns1:path>%s/JPP-commons-war.pom</ns1:path>
-         <ns1:properties>
-            <xmvn.resolver.disableEffectivePom>true</xmvn.resolver.disableEffectivePom>
-         </ns1:properties>
       </ns1:artifact>
    </ns1:artifacts>
 </ns1:metadata>
diff --git a/test/data/maven_depmap/usr/share/java/depmngmnt.jar b/test/data/maven_depmap/usr/share/java/depmngmnt.jar
new file mode 100644
index 00000000..db960407
Binary files /dev/null and b/test/data/maven_depmap/usr/share/java/depmngmnt.jar differ
diff --git a/test/install_pom_test.py b/test/install_pom_test.py
new file mode 100644
index 00000000..c6acc644
--- /dev/null
+++ b/test/install_pom_test.py
@@ -0,0 +1,166 @@
+import inspect
+import os
+import unittest
+import shutil
+
+from test_common import (DIRPATH, install_pom, call_script, assertIn)
+
+from lxml import etree
+from xml_compare import compare_lxml_etree
+
+
+class TestInstallPom(unittest.TestCase):
+
+    maxDiff = 2048
+
+    def setUp(self):
+        try:
+            self.olddir = os.getcwd()
+            self.datadir = os.path.join(DIRPATH,
+                                        'data',
+                                        'install_pom')
+            self.workdir = os.path.realpath(os.path.join(self.datadir, "..",
+                                            "install_pom_workdir"))
+
+            shutil.copytree(self.datadir, self.workdir)
+            os.chdir(self.workdir)
+        except OSError:
+            pass
+
+    def tearDown(self):
+        try:
+            shutil.rmtree(self.workdir)
+            os.chdir(self.olddir)
+        except OSError:
+            pass
+
+    def check_result(self, test_name, result):
+        got = etree.parse(result).getroot()
+        want = etree.parse(os.path.join(self.workdir,
+                                        test_name+"-want.xml")).getroot()
+        report = compare_lxml_etree(got, want)
+        if report:
+            report = '\n' + report
+        return report
+
+    @install_pom('JPP-bndlib.pom')
+    def test_basic(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom('JPP-apache-commons-io.pom')
+    def test_packaging_pom(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom('JPP-noversion.pom')
+    def test_missing_version(self, stdout, stderr, return_value, result):
+        self.assertNotEqual(return_value, 0)
+
+    @install_pom('JPP-noversion-pom.pom')
+    def test_packaging_pom_missing_version(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom('JPP-parent-version.pom')
+    def test_parent_version(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom(os.path.join('cglib', 'pom.xml'))
+    def test_parent_install(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom(os.path.join('cglib', 'cglib', 'pom.xml'))
+    def test_interpolate_from_parent(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom(os.path.join('cglib', 'cglib-integration-test', 'pom.xml'))
+    def test_interpolate_from_model(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom(os.path.join('xmvn', 'xmvn-mojo', 'pom.xml'))
+    def test_parent_relpath(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom(os.path.join('xmvn', 'xmvn-tools', 'xmvn-install', 'pom.xml'))
+    def test_parent_chain(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom(os.path.join('xmvn', 'xmvn-tools', 'xmvn-resolve', 'pom.xml'))
+    def test_any_not_final(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom(os.path.join('languagetool', 'languagetool-standalone', 'pom.xml'))
+    def test_dep_type(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom(os.path.join('languagetool', 'languagetool-language-modules', 'ja', 'pom.xml'))
+    def test_dep_classifier(self, stdout, stderr, return_value, result):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           result)
+        self.assertEqual(report, '', report)
+
+    @install_pom('a_binary_file.pom')
+    def test_not_pom(self, stdout, stderr, return_value, result):
+        self.assertNotEqual(return_value, 0)
+
+    @install_pom('a_file_that_does_not_exist.pom')
+    def test_no_pom(self, stdout, stderr, return_value, result):
+        self.assertNotEqual(return_value, 0)
+
+    def test_no_args(self):
+        stdout, stderr, return_value = call_script(os.path.join(DIRPATH, '..',
+            'java-utils', 'install_pom.py'), [])
+        self.assertNotEqual(return_value, 0)
+
+    def test_no_directory(self):
+        stdout, stderr, return_value = call_script(os.path.join(DIRPATH, '..',
+            'java-utils', 'install_pom.py'),
+                ['JPP-bndlib.pom', os.path.join('missingdir', 'JPP-bndlib.pom')])
+        self.assertNotEqual(return_value, 0)
+
+    def test_not_directory(self):
+        stdout, stderr, return_value = call_script(os.path.join(DIRPATH, '..',
+            'java-utils', 'install_pom.py'),
+                ['JPP-bndlib.pom', os.path.join('fakedir', 'JPP-bndlib.pom')])
+        self.assertNotEqual(return_value, 0)
+
+    def test_no_overwrite(self):
+        stdout, stderr, return_value = call_script(os.path.join(DIRPATH, '..',
+            'java-utils', 'install_pom.py'),
+                ['JPP-bndlib.pom', 'fakedir'])
+        self.assertNotEqual(return_value, 0)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/test/maven_depmap_test.py b/test/maven_depmap_test.py
new file mode 100644
index 00000000..41b2c014
--- /dev/null
+++ b/test/maven_depmap_test.py
@@ -0,0 +1,354 @@
+import inspect
+from zipfile import ZipFile
+import os
+import unittest
+import shutil
+from test_common import (DIRPATH, mvn_depmap, call_script,
+                         prepare_metadata, assertIn)
+from test_rpmbuild import Package
+
+from lxml import etree
+from xml_compare import compare_lxml_etree
+
+
+class TestMavenDepmap(unittest.TestCase):
+
+    maxDiff = 2048
+
+    def setUp(self):
+        try:
+            self.olddir = os.getcwd()
+            self.datadir = os.path.join(DIRPATH,
+                                        'data',
+                                        'maven_depmap')
+            self.workdir = os.path.realpath(os.path.join(self.datadir, "..",
+                                            "maven_depmap_workdir"))
+
+            shutil.copytree(self.datadir, self.workdir)
+            os.chdir(self.workdir)
+        except OSError:
+            pass
+
+        prepare_metadata(self.workdir)
+
+    def tearDown(self):
+        try:
+            shutil.rmtree(self.workdir)
+            os.chdir(self.olddir)
+        except OSError:
+            pass
+
+    def check_result(self, test_name, depmap):
+        got = etree.fromstring(depmap)
+        want = etree.parse(os.path.join(self.workdir,
+                                        test_name+"-want.xml")).getroot()
+        report = compare_lxml_etree(got, want, unordered=['artifact', 'maven'])
+        if report:
+            report = '\n' + report
+        return report
+
+    def check_archive(self, test_name, archive_path, keep_comments=False):
+        got = ZipFile(archive_path, 'r')
+        want = ZipFile('{name}-want.{ext}'.format(name=test_name,
+                       ext=archive_path.split('.')[-1]))
+        try:
+            if got.testzip() is not None:
+                return ("Not valid zip file", "")
+            got_mf = self.read_archive(got, keep_comments)
+            want_mf = self.read_archive(want, keep_comments)
+        finally:
+            got.close()
+            want.close()
+        return (got_mf, want_mf)
+
+    def read_archive(self, archive, keep_comments=False):
+        res = {}
+        for filename in archive.namelist():
+            mf_file = archive.open(filename)
+            try:
+                if (keep_comments):
+                    res[str(filename)] = mf_file.readlines()
+                else:
+                    res[str(filename)] = \
+                            [line for line in mf_file.readlines()
+                                    if not line.startswith(b'#')]
+            finally:
+                mf_file.close()
+        return res
+
+    @mvn_depmap('JPP-bndlib.pom', 'usr/share/java/bndlib.jar')
+    def test_basic(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('JPP-commons-io.pom')
+    def test_missing_jar_arg(self, stdout, stderr, return_value, depmap):
+        self.assertNotEqual(return_value, 0)
+
+    @mvn_depmap('JPP-apache-commons-io.pom')
+    def test_packaging_pom_no_jar(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('JPP-noversion.pom')
+    def test_missing_version(self, stdout, stderr, return_value, depmap):
+        self.assertNotEqual(return_value, 0)
+
+    @mvn_depmap('JPP-parent-version.pom')
+    def test_parent_version(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('JPP-commons-war.pom', 'usr/share/java/commons-war.war')
+    def test_war(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    def test_not_pom(self):
+        stdout, stderr, return_value = call_script(os.path.join(DIRPATH, '..',
+            'java-utils', 'maven_depmap.py'),
+                ['.out', 'usr/share/java/commons-io.jar',
+                    'usr/share/java/commons-io.jar'])
+        self.assertNotEqual(return_value, 0)
+
+    def test_no_pom(self):
+        stdout, stderr, return_value = call_script(os.path.join(DIRPATH, '..',
+            'java-utils', 'maven_depmap.py'),
+                ['.out'])
+        self.assertNotEqual(return_value, 0)
+
+    def test_no_args(self):
+        stdout, stderr, return_value = call_script(os.path.join(DIRPATH, '..',
+            'java-utils', 'maven_depmap.py'),
+                [])
+        self.assertNotEqual(return_value, 0)
+
+    @mvn_depmap('a:b:12', 'usr/share/java/commons-io.jar')
+    def test_mvn_spec(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('a:b:war::1', 'usr/share/java/commons-war.war')
+    def test_mvn_spec_war(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('/builddir/build/BUILDROOT/pkg-2.5.2-2.fc21.x86_64/a:b:war::1',
+            'usr/share/java/commons-war.war')
+    def test_mvn_spec_buildroot(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('builddir/build/BUILDROOT/usr/share/maven-poms/JPP-commons-war.pom',
+                'usr/share/java/commons-war.war')
+    def test_buildroot(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                   depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('a:b:12', 'usr/share/java/commons-io.jar', ['-a', 'x:y'])
+    def test_append(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    # FIXME: aliases cause trouble
+    #@mvn_depmap('a:b:12', 'usr/share/java/commons-io.jar', ['-a', 'x:y,z:w'])
+    #def test_append_multiple(self, stdout, stderr, return_value, depmap):
+    #    self.assertEqual(return_value, 0, stderr)
+    #    report = self.check_result(inspect.currentframe().f_code.co_name,
+    #                                       depmap)
+    #    self.assertEqual(report, '', report)
+
+    @mvn_depmap('a:b:12', 'usr/share/java/commons-io.jar', ['-n', 'myns'])
+    def test_namespace(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('a:b:12', 'usr/share/java/commons-io.jar', ['--namespace=myns',
+        '--append=x:y'])
+    def test_append_and_namespace(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('a:b:12', 'usr/foo/share/java/compare_jar.jar')
+    def test_compare_jar(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        got, want = self.check_archive(inspect.currentframe().f_code.co_name,
+                'usr/foo/share/java/compare_jar.jar')
+        self.assertEqual(got, want)
+
+    #test case for rhbz#1012982
+    @mvn_depmap('x:y:war:z:0.1', 'usr/foo/share/java/compare_jar_class_ext.war')
+    def test_compare_jar_class_ext(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        got, want = self.check_archive(inspect.currentframe().f_code.co_name,
+                'usr/foo/share/java/compare_jar_class_ext.war')
+        self.assertEqual(got, want)
+
+    @mvn_depmap('a:b:12', 'usr/share/java/already-has-pom-properties.jar')
+    def test_compare_jar_unmodified(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        got, want = self.check_archive(inspect.currentframe().f_code.co_name,
+                'usr/share/java/already-has-pom-properties.jar', keep_comments=True)
+        self.assertEqual(got, want)
+
+    @mvn_depmap('x:y:0.1', 'usr/share/java/already-has-pom-properties.jar')
+    def test_compare_jar_modified(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        got, want = self.check_archive(inspect.currentframe().f_code.co_name,
+                'usr/share/java/already-has-pom-properties.jar')
+        self.assertEqual(got, want)
+
+    @mvn_depmap('/builddir/build/BUILDROOT/pkg-2.5.2-2.fc21.x86_64/x:y:0.1',
+            'usr/share/java/already-has-pom-properties.jar')
+    def test_rhbz1012245(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        got, want = self.check_archive('test_compare_jar_modified',
+                'usr/share/java/already-has-pom-properties.jar')
+        self.assertEqual(got, want)
+
+    @mvn_depmap('x:y:jar:z:0.1', 'usr/share/java/commons-io-z.jar',
+            ['-a', 'a:b:jar:c:12'])
+    def test_classifier(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('x:y:0.1', 'usr/share/java/commons-io.jar', ['-r', '1,2,3'])
+    def test_version(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('JPP/x:y:0.1', 'usr/share/java/commons-io.jar',
+            ['--versions', '1,2,3'])
+    def test_version2(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result('test_version', depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('x:y:0.1', 'usr/share/java/commons-io.jar',
+            ['-r', '1,2,3', '-a', 'a:b:32'])
+    def test_version_append(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('x:y:0.1', 'usr/share/java/commons-io.jar',
+            ['-r', '1,2,3', '-n', 'ns', '-a', 'a:b:32'])
+    def test_version_namespace(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('x:y', 'usr/share/java/commons-io.jar')
+    def test_missing_version2(self, stdout, stderr, return_value, depmap):
+        self.assertNotEqual(return_value, 0)
+
+    @mvn_depmap('x:y:war:1', 'usr/share/java/commons-io.jar')
+    def test_incorrect_extension(self, stdout, stderr, return_value, depmap):
+        self.assertNotEqual(return_value, 0)
+
+    @mvn_depmap('evil:', 'usr/share/java/commons-io.jar')
+    def test_incorrect_artifact(self, stdout, stderr, return_value, depmap):
+        self.assertNotEqual(return_value, 0)
+
+    @mvn_depmap('JPP-cdata.pom')
+    def test_cdata(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('g:a:war:1.2.3', 'usr/share/java/versioned.war', ['-r', '2.0.0'])
+    def test_versioned(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+        self.assertEqual(False, os.path.exists('usr/share/java/versioned.war'))
+        self.assertEqual(True, os.path.exists('usr/share/java/versioned-2.0.0.war'))
+
+    @mvn_depmap('g:a:1.2', 'usr/share/java/versioned2.jar', ['-r', '1.2'])
+    def test_versioned2(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+        self.assertEqual(False, os.path.exists('usr/share/java/versioned2.jar'))
+        self.assertEqual(True, os.path.exists('usr/share/java/versioned2-1.2.jar'))
+
+    @mvn_depmap('g:a:jar:tests:1', 'usr/share/java/versioned-3-tests.jar', ['-r', '1,1.2'])
+    def test_versioned_classifier(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+        self.assertEqual(False, os.path.exists('usr/share/java/versioned-3-tests.jar'))
+        self.assertEqual(True, os.path.exists('usr/share/java/versioned-3-tests-1.jar'))
+        self.assertEqual(True, os.path.exists('usr/share/java/versioned-3-tests-1.2.jar'))
+
+    @mvn_depmap('JPP-testversioned.pom', 'usr/share/java/testversioned.jar', ['-r', '2013.10'])
+    def test_versioned_with_pom(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+        self.assertEqual(False, os.path.exists('usr/share/java/testversioned.jar'))
+        self.assertEqual(True, os.path.exists('usr/share/java/testversioned-2013.10.jar'))
+
+    @mvn_depmap('JPP-alias.pom', 'usr/share/java/commons-io.jar', ['-a', 'a:b'])
+    def test_alias_extension(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('JPP-depmngmnt.pom', 'usr/share/java/depmngmnt.jar')
+    def test_expansion(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    @mvn_depmap('JPP-modelexpansion.pom', 'usr/share/java/depmngmnt.jar')
+    def test_expansion_model(self, stdout, stderr, return_value, depmap):
+        self.assertEqual(return_value, 0, stderr)
+        report = self.check_result(inspect.currentframe().f_code.co_name,
+                                           depmap)
+        self.assertEqual(report, '', report)
+
+    def test_missing_jar(self):
+        p = Package('test')
+        p.append_to_prep("%add_maven_depmap g:a:1 this/file/doesnt/exist.jar")
+        _, stderr, return_value = p.run_prep()
+        self.assertEqual(1, return_value, 'bad return value')
+        assertIn(self, 'file not found', stderr)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/test/test_common.py b/test/test_common.py
index d694046a..d3b699f2 100644
--- a/test/test_common.py
+++ b/test/test_common.py
@@ -266,6 +266,47 @@ def rpmgen_process_args(args, kwargs):
     return args, kwargs
 
 
+def install_pom(pom):
+    def test_decorator(fun):
+        @wraps(fun)
+        def test_decorated(self):
+            os.chdir(self.workdir)
+            buildroot = os.path.join(self.workdir, "builddir/build/BUILDROOT")
+            env = {'RPM_BUILD_ROOT': buildroot}
+            scriptpath = path.join(DIRPATH, '..', 'java-utils', 'install_pom.py')
+            args = [pom, '.result_file']
+            (stdout, stderr, return_value) = call_script(scriptpath, args, extra_env=env)
+            res_file = None
+            if return_value == 0:
+                res_file = open('.result_file','r')
+            fun(self, stdout, stderr, return_value, result=res_file)
+            if res_file != None:
+                os.remove('.result_file')
+        return test_decorated
+    return test_decorator
+
+def mvn_depmap(pom, jar=None, fnargs=None):
+    def test_decorator(fun):
+        @wraps(fun)
+        def test_decorated(self):
+            os.chdir(self.workdir)
+            buildroot = os.path.join(self.workdir, "builddir/build/BUILDROOT")
+            env = {'RPM_BUILD_ROOT': buildroot}
+            scriptpath = path.join(DIRPATH, '..', 'java-utils', 'maven_depmap.py')
+            args = ['.fragment_data', pom]
+            if jar:
+                args.append(path.join(os.getcwd(), jar))
+            args.extend(fnargs or [])
+            (stdout, stderr, return_value) = call_script(scriptpath, args, extra_env=env)
+            frag = None
+            if return_value == 0:
+                with open('.fragment_data','r') as frag_file:
+                    frag = frag_file.read()
+                os.remove('.fragment_data')
+            fun(self, stdout, stderr, return_value, depmap=frag)
+        return test_decorated
+    return test_decorator
+
 def mvn_artifact(pom, jar=None):
     def test_decorator(fun):
         @wraps(fun)
openSUSE Build Service is sponsored by