<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2008 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>

  <groupId>com.googlesource.gerrit.plugins.bugzilla</groupId>
  <artifactId>hooks-bugzilla</artifactId>
  <version>2.8-SNAPSHOT</version>

  <name>Gerrit - Bugzilla support</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <Gerrit-ApiType>plugin</Gerrit-ApiType>
    <Gerrit-ReloadMode>reload</Gerrit-ReloadMode>
    <Gerrit-InitStep>com.googlesource.gerrit.plugins.hooks.bz.InitBugzilla</Gerrit-InitStep>
    <Gerrit-Module>com.googlesource.gerrit.plugins.hooks.bz.BugzillaModule</Gerrit-Module>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>1.6</version>
          <configuration>
            <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
            <artifactSet>
              <excludes>
                <exclude>com.google.gerrit:*</exclude>
                <exclude>org.bouncycastle:*</exclude>
                <exclude>org.slf4j:*</exclude>
                <exclude>com.google.guava:*</exclude>
                <exclude>org.eclipse.jgit:*</exclude>
              </excludes>
            </artifactSet>
            <transformers>
              <transformer
                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <manifestEntries>
                  <Implementation-Vendor>Wikimedia Foundation, Inc.</Implementation-Vendor>
                  <Implementation-URL>https://www.wikimediafoundation.org/</Implementation-URL>
                  <Implementation-Title>Plugin ${project.artifactId}</Implementation-Title>
                  <Implementation-Version>${project.version}</Implementation-Version>
                  <Gerrit-ApiType>${Gerrit-ApiType}</Gerrit-ApiType>
                  <Gerrit-ApiVersion>${project.version}</Gerrit-ApiVersion>
                  <Gerrit-ReloadMode>${Gerrit-ReloadMode}</Gerrit-ReloadMode>
                  <Gerrit-InitStep>${Gerrit-InitStep}</Gerrit-InitStep>
                  <Gerrit-Module>${Gerrit-Module}</Gerrit-Module>
                </manifestEntries>
              </transformer>
            </transformers>
          </configuration>
          <executions>
            <execution>
              <phase>package</phase>
              <goals>
                <goal>shade</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>com.googlesource.gerrit.plugins.its</groupId>
      <artifactId>hooks-its</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>com.j2bugzilla</groupId>
      <artifactId>j2bugzilla</artifactId>
      <version>2.2-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <repositories>
    <repository>
      <id>gerrit-maven</id>
      <url>https://gerrit-maven.commondatastorage.googleapis.com</url>
    </repository>
  </repositories>

</project>
