<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.stanbol</groupId>
    <artifactId>stanbol-parent</artifactId>
    <version>7-SNAPSHOT</version>
    <relativePath>../parent</relativePath>
  </parent>

  <groupId>org.apache.stanbol</groupId>
  <artifactId>apache-stanbol-commons</artifactId>
  <version>1.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Apache Stanbol Commons</name>
  <description>
    Pseudo project to build the complete Apache Stanbol Commons bundles
  </description>  

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

  <scm>
    <connection>
      scm:svn:http://svn.apache.org/repos/asf/stanbol/trunk/commons
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/commons
    </developerConnection>
    <url>http://stanbol.apache.org/</url>
  </scm>

  <modules>
    <!-- Basic OSGi bundles -->
    <module>frameworkfragment</module>

    <!-- Stanbol Web Framework (JAX-RS & Web UI)-->
    <module>web/base</module>
    <module>web/base.jersey</module>
    <module>web/home</module>
    <module>web/resources</module>
    <module>web/sparql</module>
    <module>freemarker</module>
    <module>ldpathtemplate</module>
    <module>web/viewable</module>
    <module>web/rdfviewable-writer</module>
    <module>web/viewable-writer</module>
    <module>httpqueryheaders</module> <!-- allows CORS with MS Internet Explorer -->
	<module>cors</module>
	
    <!-- DataFile Provider -->
    <module>stanboltools/datafileprovider</module>
    <module>stanboltools/bundledatafileprovider</module>
    <module>stanboltools/offline</module> <!-- offline tool support-->
    <module>installer/bundleprovider</module> <!-- Sling installer plugin -->
    
    <!-- Namespace Prefix Service STANBOL-824 -->
    <module>namespaceprefix/service</module>
    <!-- module>namespaceprefix/bundleprovider</module -->
    <!-- module>namespaceprefix/datafileprovider</module -->
    <module>namespaceprefix/stanbolprovider</module>
    <module>namespaceprefix/prefixccprovider</module>

    <!-- Apache Solr integration--> 
    <module>solr/core</module>
    <module>solr/managed</module>
    <module>solr/web</module>
    <module>solr/install</module>
    <module>solr/defaults</module>
    <module>solr/extras/smartcn</module> <!-- support for the smartcn (Chinese) analyzer -->
    <module>solr/extras/kuromoji</module> <!-- support for Japanese -->
    <module>solr/extras/icu</module> <!-- support for ICU -->
    <module>solr/extras/stempel</module> <!-- support for the Polish stemmer -->
    
    <!-- Marmotta Kiwi Repository -->
    <module>marmotta/kiwi</module> <!-- KiWi Triple Store -->
    
    <!-- Apache Tika Bundle-->
    <module>tikabundle</module>
    
    <module>jobs</module> <!-- Stanbol Background Jobs Framework -->
  
    <!-- OpenNLP extensions -->
    <module>opennlp</module> <!-- Allows to load OpenNLP modles via DataFile provider -->
    <module>ixa-pipe-nerc</module> <!-- extensions for OpenNLP (STANBOL-1422)-->
    
    <module>owl</module>
  
    <!-- Apache Clerezza utils and extensions-->
    <module>indexedgraph</module>
    <!-- JSON-LD serializer/parser provider for Clerezza 
       (should move to https://github.com/jsonld-java/jsonld-java/tree/master/integration/clerezza)
     -->
    <module>jsonld</module>
    <module>ldpath/clerezza</module>
    <module>launchpad</module>
    
    <!-- Stanbol Security -->
    <module>security/core</module>
    <module>security/authentication.basic</module>
    <module>security/felixwebconsole</module>
    <module>security/usermanagement</module>
    <module>caslight</module>

    <!-- Stanbol IntegrationTest utils -->
    <module>testing/jarexec</module>
    <module>testing/http</module>
    <module>testing/stanbol</module>
  </modules>

  <profiles>
    <profile>
      <id>apache-release</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <configuration>
              <excludeSubProjects>false</excludeSubProjects>
              <excludes>
                <!--
                  All license headers are also checked per
                  artifact. These excludes are necessary
                  to make the reactor build suceed. Consider
                  the excluded files here as already checked
                  in the artifacts.
                -->

                <!-- exclude hidden files -->
                <exclude>**/.*</exclude>
                <exclude>**/.*/*</exclude>
                <exclude>**/.*/**/*</exclude>

                <!-- exclude build files -->
                <exclude>**/target/**</exclude>
                <exclude>**/*.log</exclude>

                <!-- exclude generated files listing the licenses of deps -->
                <exclude>DEPENDENCIES</exclude>
                <exclude>DEPENDENCIES-BY-LICENSE</exclude>
                <exclude>RAT-REPORT</exclude>
                <exclude>**/src/license/THIRD-PARTY.properties</exclude>

                <exclude>**/META-INF/services/*</exclude>
                <exclude>**/META-INF/resources/**/*.js</exclude>

                <!-- exclude certain types by extension -->
                <exclude>**/*.properties</exclude>
                <exclude>**/*.config</exclude>             
                <exclude>**/*.nt</exclude>
                <exclude>**/*.txt</exclude>

                <!-- exclude test files --> 
                <exclude>**/test/**/*.mappings</exclude>

              </excludes>
            </configuration>
          </plugin>
          <!-- plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>license-maven-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>aggregate-add-third-party</goal>
                </goals>
              </execution>
            </executions>
          </plugin -->
        </plugins>
      </build>
    </profile>    
  </profiles>

</project>
