<?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.mng3133</groupId>
  <artifactId>parent</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Maven Integration Test :: MNG-3133</name>
  <description>
    Verify that URL normalization does not happen before interpolation which would result in invalid
    inherited URLs for project layouts where the parent resides in a sibling directory of the child
    and expressions are used for the parent URLs ("${expression}/../foo" -> "foo").
  </description>

  <modules>
    <module>../child</module>
  </modules>

  <properties>
    <webUrl>http://server.org/project</webUrl>
    <scmUrl>scm:svn:https://svn.org/project</scmUrl>
    <siteUrl>dav://server.org/project</siteUrl>
  </properties>

  <url>${webUrl}</url>
  <scm>
    <url>${scmUrl}</url>
    <connection>${scmUrl}</connection>
    <developerConnection>${scmUrl}</developerConnection>
  </scm>
  <distributionManagement>
    <site>
      <id>website</id>
      <url>${siteUrl}</url>
    </site>
  </distributionManagement>
</project>
