<?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.it0061</groupId>
  <artifactId>maven-it-it0061</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <name>Maven Integration Test :: it0061</name> 
  <description>
    Verify that deployment of artifacts to a legacy-layout repository
    results in a groupId directory of 'the.full.group.id' instead of
    'the/full/group/id'.
  </description>

  <distributionManagement>
    <repository>
      <id>test</id>
      <url>file:///${basedir}/target/test-repo</url>
      <layout>legacy</layout>
    </repository>
  </distributionManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-artifact</artifactId>
        <version>2.1-SNAPSHOT</version>
        <configuration>
          <mainFile>artifact.jar</mainFile>
        </configuration>
        <executions>
          <execution>
            <id>deploy</id>
            <phase>validate</phase>
            <goals>
              <goal>set</goal>
              <goal>attach-pom</goal>
              <goal>deploy</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
