<?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.mng3052</groupId>
  <artifactId>direct</artifactId>
  <version>0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <distributionManagement>
    <repository>
      <id>maven-core-it</id>
      <url>file:///${basedir}/repo</url>
    </repository>
  </distributionManagement>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven.its.mng3052</groupId>
      <artifactId>trans</artifactId>
      <version>0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <repositories>
    <repository>
      <id>maven-core-it-repo-t</id>
      <url>@baseurl@/repo-t</url>
      <releases>
        <checksumPolicy>ignore</checksumPolicy>
      </releases>
      <snapshots>
        <checksumPolicy>ignore</checksumPolicy>
      </snapshots>
    </repository>
  </repositories>
</project>
