<?xml version="1.0" encoding="UTF-8"?>
<!--
   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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <name>Apache Jena</name>
  <groupId>org.apache.jena</groupId>
  <artifactId>jena</artifactId>
  <packaging>pom</packaging>
  <url>http://jena.apache.org/</url>
  <version>3.1.0-SNAPSHOT</version>

  <!-- Needed for -Papache-release -->
  <!-- The org.apache:apache version is also in jena-parent pom.xml -->
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>16</version>
    <relativePath />
  </parent>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>

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

  <scm>
    <connection>scm:git:https://git-wip-us.apache.org/repos/asf/jena.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/jena.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf/jena.git</url>
    <tag>HEAD</tag>
  </scm>

  <profiles>
    <profile>
      <!--
          This is the dev profile, typically used locally with 
          "mvn clean install -Pdev".
          It only builds the moduels shipped in apache-jena binaries.
      -->
      <id>dev</id>
      <!-- The maven artifacts of the basic modules -->
      <modules>
        <module>jena-parent</module>
        <!-- <module>jena-shared-guava</module> -->
        <!-- <module>jena-iri</module> -->
        <module>jena-base</module>
        
        <module>jena-core</module>
        <module>jena-arq</module>
        <module>jena-tdb</module> 
        <module>apache-jena-libs</module>
        <module>jena-cmds</module>

        <!--<module>jena-fuseki1</module>-->
        <module>jena-fuseki2</module>

        <module>jena-permissions</module>

        <!-- Slow to build - exclude from dev build -->
        <!-- <module>jena-jdbc</module>           -->
        <!-- <module>jena-maven-tools</module>    -->
        <!-- <module>apache-jena-libs</module>    -->
        <!-- <module>apache-jena</module>         -->
        <!-- <module>jena-elephas</module> -->
        <!-- <module>jena-extras</module> -->
      </modules>
    </profile>

    <profile>
      <!--
          This is the complete profile, it builds everything including slow
          building modules and the distribution packages.
      -->
      <id>complete</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <property>
          <name>profile.complete</name>
          <value>true</value>
        </property>
      </activation>
      <modules>
        <module>jena-parent</module>
        <module>jena-shaded-guava</module>
        <module>jena-iri</module>
        <module>jena-base</module>

        <module>jena-core</module>
        <module>jena-arq</module>
        <module>jena-tdb</module>
        <module>apache-jena-libs</module>
        <module>jena-cmds</module>

        <module>jena-text</module>
        <module>jena-spatial</module>
        <module>jena-csv</module>

        <module>jena-sdb</module>

        <module>jena-fuseki1</module>
        <module>jena-fuseki2</module>
        <module>jena-permissions</module>

        <module>jena-jdbc</module>
        <module>jena-maven-tools</module>
        <module>jena-elephas</module>

        <module>apache-jena</module>
        <module>apache-jena-osgi</module>

        <module>jena-extras</module>
      </modules>
    </profile>
  </profiles>

  <mailingLists>
    <mailingList>
      <name>Jena Users Mailing List</name>
      <post>users@jena.apache.org</post>
      <subscribe>users-subscribe@jena.apache.org</subscribe>
      <unsubscribe>users-unsubscribe@jena.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/jena-users/</archive>
      <otherArchives>
        <otherArchive>http://www.mail-archive.com/users@jena.apache.org/</otherArchive>
        <otherArchive>http://markmail.org/search/?q=list%3Aorg.apache.jena.users</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Jena Developers Mailing List</name>
      <post>dev@jena.apache.org</post>
      <subscribe>dev-subscribe@jena.apache.org</subscribe>
      <unsubscribe>dev-unsubscribe@jena.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/jena-dev/</archive>
      <otherArchives>
        <otherArchive>http://www.mail-archive.com/dev@jena.apache.org/</otherArchive>
        <otherArchive>http://markmail.org/search/?q=list%3Aorg.apache.jena.dev</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>Jena Commits</name>
      <post>commits@jena.apache.org</post>
      <subscribe>commits-subscribe@jena.apache.org</subscribe>
      <unsubscribe>commits-unsubscribe@jena.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/jena-commits/</archive>
    </mailingList>
  </mailingLists>

  <issueManagement>
    <system>JIRA</system>
    <url>http://issues.apache.org/jira/browse/JENA</url>
  </issueManagement>

</project>
