<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2012 The Android Open Source Project

Licensed 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>

  <parent>
    <groupId>com.google.gerrit</groupId>
    <artifactId>gerrit-parent</artifactId>
    <version>2.8-SNAPSHOT</version>
  </parent>

  <artifactId>gerrit-plugin-api</artifactId>
  <name>Gerrit Code Review - Plugin API</name>

  <description>
    API for tightly coupled plugins to compile against
  </description>

  <dependencies>
    <dependency>
      <groupId>com.google.gerrit</groupId>
      <artifactId>gerrit-sshd</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>com.google.gerrit</groupId>
      <artifactId>gerrit-httpd</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>com.google.gerrit</groupId>
      <artifactId>gerrit-pgm</artifactId>
      <version>${project.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>jetty-servlet</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>servlet-api</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <configuration>
          <createSourcesJar>true</createSourcesJar>
          <artifactSet>
            <excludes>
              <exclude>gwtjsonrpc:gwtjsonrpc</exclude>
              <exclude>com.google.gerrit:gerrit-gwtexpui</exclude>
              <exclude>com.google.gerrit:gerrit-prettify</exclude>
              <exclude>com.google.gerrit:gerrit-patch-commonsnet</exclude>
              <exclude>com.google.gerrit:gerrit-patch-jgit</exclude>
              <exclude>com.google.gerrit:gerrit-util-ssl</exclude>

              <exclude>com.googlecode.juniversalchardet:juniversalchardet</exclude>
              <exclude>com.googlecode.prolog-cafe:PrologCafe</exclude>
              <exclude>org.slf4j:slf4j-log4j12</exclude>
              <exclude>log4j:log4j</exclude>

              <exclude>commons-collections:commons-collections</exclude>
              <exclude>commons-codec:commons-codec</exclude>
              <exclude>commons-dbcp:commons-dbcp</exclude>
              <exclude>commons-lang:commons-lang</exclude>
              <exclude>commons-net:commons-net</exclude>
              <exclude>commons-pool:commons-pool</exclude>

              <exclude>asm:asm</exclude>
              <exclude>eu.medsea.mimeutil:mime-util</exclude>
              <exclude>org.antlr:antlr</exclude>
              <exclude>org.antlr:antlr-runtime</exclude>
              <exclude>org.apache.mina:mina-core</exclude>
              <exclude>oro:oro</exclude>
            </excludes>
          </artifactSet>
          <filters>
            <filter>
              <artifact>com.google.gerrit:gerrit-server</artifact>
              <excludes>
                <exclude>gerrit/**</exclude>
              </excludes>
            </filter>
          </filters>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
