<?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 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.its.mng0449</groupId>
  <artifactId>maven-it-plugin-b</artifactId>
  <version>0.1</version>
  <packaging>maven-plugin</packaging>

  <name>Maven Integration Test Plugin :: Packaging</name>
  <description>
    A test plugin that defines a custom artifact handler ("it-artifact") and a new packaging type ("it-packaging").
  </description>
  <inceptionYear>2006</inceptionYear>

  <distributionManagement>
    <repository>
      <id>maven-core-it</id>
      <url>file:///${basedir}/repo</url>
    </repository>
  </distributionManagement>

  <properties>
    <maven.test.skip>true</maven.test.skip>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>2.0</version>
    </dependency>
    <dependency>
      <!--
      NOTE: This is a dummy dependency whose contents doesn't matter. All that matters is that the plugin has at least
      one dependency that is not excluded by the artifact filter of the core. This makes our IT plugin more closely
      resemble a real-world plugin and in particular makes sure the extension manager does not consider the plugin
      artifact as a standalone resource package. This subtle difference is crucial to reproduce MNG-2831.
      -->
      <groupId>org.apache.maven.its</groupId>
      <artifactId>maven-core-it-support</artifactId>
      <version>1.0</version>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>.</directory>
        <includes>
          <include>pom.xml</include>
          <include>src/**</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
  </build>
</project>
