<?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:http://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>
