<!--
  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.vxquery</groupId>
  <artifactId>vxquery</artifactId>
  <packaging>pom</packaging>
  <version>0.1-SNAPSHOT</version>
  <name>VXQuery</name>
  <description>A Versatile XQuery Processor</description>
  <url>http://incubator.apache.org/vxquery/</url>

  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org/</url>
  </organization>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>

  <issueManagement>
    <system>Jira</system>
    <url>https://issues.apache.org/jira/browse/VXQUERY</url>
  </issueManagement>

  <developers>
      <developer>
        <id>pzf</id>
        <name>Paul Fremantle</name>
        <email></email>
        <roles>
          <role>Mentor</role>
        </roles>
        <organization></organization>
        <timezone></timezone>
      </developer>         
      <developer>
        <id>radup</id>
        <name>Radu Preotiuc</name>
        <email></email>
        <roles>
            <role>Mentor</role>
        </roles>
        <organization></organization>
        <timezone></timezone>
      </developer>         
      <developer>
        <id>sanjiva</id>
        <name>Sanjiva Weerawarana</name>
        <email></email>
        <roles>
            <role>Mentor</role>
        </roles>
        <organization></organization>
        <timezone></timezone>
      </developer>         
      <developer>
        <id>jochen</id>
        <name>Jochen Wiedmann</name>
        <email></email>
        <roles>
            <role>Mentor</role>
        </roles>
        <organization></organization>
        <timezone></timezone>
      </developer>         
      <developer>
        <id>cezar</id>
        <name>Cezar Andrei</name>
        <email></email>
        <roles>
          <role>Project Manager</role>
          <role>Architect</role>
        </roles>
        <organization></organization>
        <timezone>-6</timezone>
      </developer>         
      <developer>
        <id>vinayakb</id>
        <name>Vinayak Borkar</name>
        <email></email>
        <roles>
          <role>Project Manager</role>
          <role>Architect</role>
        </roles>
        <organization></organization>
        <timezone>-8</timezone>
      </developer>         
      <developer>
        <id>dtabass</id>
        <name>Michael J. Carey</name>
        <email></email>
        <roles>
          <role>Architect</role>
        </roles>
        <organization></organization>
        <timezone>-8</timezone>
      </developer>         
      <developer>
        <id>tillw</id>
        <name>Till Westmann</name>
        <email></email>
        <roles>
          <role>Project Manager</role>
          <role>Architect</role>
        </roles>
        <organization></organization>
        <timezone>+1</timezone>
      </developer>         
  </developers>

  <mailingLists>
      <mailingList>
        <name>VXQuery-dev</name>
        <subscribe>vxquery-dev-subscribe@incubator.apache.org</subscribe>
        <unsubscribe>vxquery-dev-unsubscribe@incubator.apache.org</unsubscribe>
       <post>vxquery-dev@incubator.apache.org</post>
       <archive>http://mail-archives.apache.org/mod_mbox/incubator-vxquery-dev/</archive>
      </mailingList>
      <mailingList>
        <name>VXQuery-commits</name>
        <subscribe>vxquery-commits-subscribe@incubator.apache.org</subscribe>
        <unsubscribe>vxquery-commits-unsubscribe@incubator.apache.org</unsubscribe>
       <post>vxquery-commits@incubator.apache.org</post>
       <archive>http://mail-archives.apache.org/mod_mbox/incubator-vxquery-commits/</archive>
      </mailingList>
  </mailingLists>

  <scm>
    <connection>scm:svn:https://svn.apache.org/repos/asf/incubator/vxquery</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/vxquery</developerConnection>
    <url>https://svn.apache.org/repos/asf/incubator/vxquery</url>
  </scm>

  <distributionManagement>
    <site>
      <id>vxquery.website</id>
      <name>VXQuery Website</name>
      <url>file:../../site/</url>
    </site>
  </distributionManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.0</version>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.6</version>
        <executions>
          <execution>
            <id>generate-site</id>
            <phase>pre-site</phase>
            <configuration>
              <target>
                  <ant antfile="build-site.xml" target="build">
                      <property name="build.gen-site.dir" value="${project.build.directory}/generated-site/apt" />
                  </ant>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>2.4</version>
        <reportSets>
          <reportSet>
            <reports>
              <report>index</report>
              <report>license</report>
              <report>project-team</report>
              <report>scm</report>
              <report>issue-tracking</report>
              <report>mailing-list</report>
              <report>plugins</report>
            </reports>
          </reportSet>
        </reportSets>
        <configuration>
            <linkOnly>true</linkOnly>
        </configuration>            
      </plugin>
    </plugins>
  </reporting>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties> 

  <modules>
    <module>vxquery-core</module>
    <module>vxquery-xtest</module>
  </modules>
 
</project>
