<!--
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 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.maven.plugin.assembly.test</groupId>
  <artifactId>it-project-parent</artifactId>
  <packaging>pom</packaging>
  <version>1</version>
  
  <profiles>
    <profile>
      <id>testing</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      
      <repositories>
        <!--
        <repository>
          <id>main.local.as.remote</id>
          <url>file://${local.repo.path}</url>
        </repository>
        -->
        <repository>
          <id>integration.test.repo</id>
          <url>@test.remote.repo.url@</url>
        </repository>
      </repositories>

      <pluginRepositories>
        <!--
        <pluginRepository>
          <id>main.local.as.remote</id>
          <url>file://${local.repo.path}</url>
        </pluginRepository>
        -->
        <pluginRepository>
          <id>integration.test.repo</id>
          <url>@test.remote.repo.url@</url>
        </pluginRepository>
      </pluginRepositories>

      <distributionManagement>
        <repository>
          <id>integration.test.repo</id>
          <url>@test.remote.repo.url@</url>
        </repository>
      </distributionManagement>

      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>${testVersion}</version>
            <extensions>true</extensions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>live</id>
      
      <!-- just avoids the information injected by the testing profile, above. -->
    </profile>
  </profiles>
</project>
