<?xml version="1.0"?>
<!--
 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>${ivy.pom.groupId}</groupId>
  <artifactId>${ivy.pom.artifactId}</artifactId>
  <packaging>${ivy.pom.packaging}</packaging>
  <version>${version}</version>
  <name>Apache Nutch</name>
  <description>${ivy.pom.description}</description>
  <url>${ivy.pom.url}</url>
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <scm>
    <developerConnection>scm:git:https://github.com/apache/nutch.git</developerConnection>
    <connection>scm:git:https://github.com/apache/nutch.git</connection>
    <url>https://github.com/apache/nutch.git</url>
  </scm>

  <pluginRepositories>
    <pluginRepository>
      <id>miredot</id>
      <name>MireDot Releases</name>
      <url>http://nexus.qmino.com/content/repositories/miredot</url>
    </pluginRepository>
  </pluginRepositories>

  <developers>
    <developer>
      <id>mattmann</id>
      <name>Chris A. Mattmann</name>
      <email>mattmann@apache.org</email>
    </developer>
    <developer>
      <id>jnioche</id>
      <name>Julien Nioche</name>
      <email>jnioche@apache.org</email>
    </developer>
    <developer>
      <id>lewismc</id>
      <name>Lewis John McGibbney</name>
      <email>lewismc@apache.org</email>
    </developer>
    <developer>
      <id>markus</id>
      <name>Markus Jelsma</name>
      <email>markus@apache.org</email>
    </developer>	
    <developer>
      <id>fenglu</id>
      <name>Feng Lu</name>
      <email>fenglu@apache.org</email>
    </developer>
    <developer>
      <id>kamaci</id>
      <name>Furkan KAMACI</name>
      <email>kamaci@apache.org</email>
    </developer>
    <developer>
      <id>kiranch</id>
      <name>Kiran Chitturi</name>
      <email>kiranch@apache.org</email>
    </developer>
    <developer>
      <id>tejasp</id>
      <name>Tejas Patil</name> 
      <email>tejasp@apache.org</email>
    </developer>
    <developer>
      <id>talat</id>
      <name>Talat Uyarer</name>
      <email>talat@apache.org</email>
    </developer>
    <developer>
      <id>snagel</id>
      <name>Sebastian Nagel</name>
      <email>snagel@apache.org</email>
    </developer>
    <developer>
      <id>thammegowda</id>
      <name>Thamme Gowda</name>
      <email>thammegowda@apache.org</email>
    </developer>
  </developers>

  <build>
    <sourceDirectory>src/java</sourceDirectory>
    <testSourceDirectory>src/test</testSourceDirectory>
    <testResources>
      <testResource>
        <directory>src/testresources</directory>
      </testResource>
    </testResources>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>com.qmino</groupId>
        <artifactId>miredot-plugin</artifactId>
        <version>2.0.1</version>
        <executions>
          <execution>
            <goals>
              <goal>restdoc</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <licence>cHJvamVjdHxvcmcuYXBhY2hlLm51dGNoLm51dGNofDIwMTktMTAtMzB8dHJ1ZXwtMSNNQ3dDRkJMb0FjM283ME1YRERRMkFJemY1QmxZUjAwK0FoUkJVMlJrVi81RlBQc25zMUZ2S2g0Q29weGFxZz09</licence>
          <restModel>
            <restFramework>
              <name>jax-rs</name>
            </restFramework>
          </restModel>
          <output>
            <html></html>
          </output>
          <!-- insert other configuration here (optional) -->
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
