<?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.
-->

<settings>
  <mirrors>
    <mirror>
      <id>it-mirror</id>
      <mirrorOf>maven-core-it-repo-a</mirrorOf>
      <url>http://localhost:@port@/</url>
    </mirror>
    <mirror>
      <id>central</id>
      <mirrorOf>central</mirrorOf>
      <url>@baseurl@/target/null</url>
    </mirror>
  </mirrors>
  <servers>
    <server>
      <id>it-mirror</id>
      <username>testuser</username>
      <password>testtest</password>
    </server>
  </servers>
  <profiles>
    <profile>
      <id>maven-core-it-repo</id>
      <repositories>
        <repository>
          <id>maven-core-it</id>
          <url>@baseurl@/repo-b</url>
          <releases>
            <checksumPolicy>ignore</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>maven-core-it-repo</activeProfile>
  </activeProfiles>
</settings>
