<?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.1-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>18</version>
  </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 modules 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>
      <!-- From the start, up until profile "dev" -->
      <id>bootstrap</id>
       <modules>
         <module>jena-parent</module>
         <module>jena-shaded-guava</module>
         <module>jena-iri</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>
        <!-- Removed because this breaks the build after the 
             upgrade of Apache parent PM to v18 - see JENA-1184 
        -->
        <!-- <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>
