<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you 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>
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.maven.its.mng3846</groupId>
  <artifactId>parent</artifactId>
  <version>0.1</version>
  <packaging>pom</packaging>

  <name>Maven Integration Test :: MNG-3846</name>
  <description>
    Test that inheritance of certain URLs automatically appends the child's artifact id.
  </description>

  <url>http://parent.url</url>
  <organization>
    <name>parent-org</name>
    <url>http://parent.url/org/</url>
  </organization>
  <licenses>
    <license>
      <name>parent-license</name>
      <url>http://parent.url/license.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <scm>
    <url>http://parent.url/viewvc</url>
    <connection>http://parent.url/scm</connection>
    <developerConnection>https://parent.url/scm</developerConnection>
  </scm>
  <issueManagement>
    <url>http://parent.url/issues</url>
  </issueManagement>
  <ciManagement>
    <url>http://parent.url/ci</url>
  </ciManagement>
  <distributionManagement>
    <repository>
      <url>http://parent.url/dist</url>
      <id>parent.distros</id>
    </repository>
    <snapshotRepository>
      <url>http://parent.url/snaps</url>
      <id>parent.snaps</id>
    </snapshotRepository>
    <site>
      <url>http://parent.url/site</url>
      <id>parent.site</id>
    </site>
    <downloadUrl>http://parent.url/download</downloadUrl>
  </distributionManagement>
</project>
