<?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>5-SNAPSHOT</version>
    <relativePath>parent</relativePath>
  </parent>

  <groupId>org.apache.stanbol</groupId>
  <artifactId>stanbol-reactor</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Apache Stanbol Reactor NG</name>
  <description>Pseudo project to build Apache Stanbol.</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/
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/stanbol/trunk/
    </developerConnection>
    <url>http://stanbol.apache.org/</url>
  </scm>

  <build>
    <finalName>apache-stanbol-${project.version}</finalName>  
  </build>

  <!-- These modules form the Stanbol Framework -->
  <modules>
    <module>releasing/source-assembly</module>    
    
    <module>parent</module>
    <module>data</module>
    <module>commons</module>

    <module>entityhub</module>
    <module>ontologymanager</module>
    <module>rules</module>
    <module>enhancer</module>
    <!-- <module>contenthub</module> -->

    <module>enhancement-engines</module>

    <!-- <module>cmsadapter</module> -->

    <module>reasoners</module>

    <!-- <module>demos/webvie</module> -->

    <module>launchers/bundlelists</module>
    <module>launchers/mini</module>
    <module>launchers/full</module>
    <module>launchers/stable</module>
   <!-- <module>launchers/full-war</module>
    
    <module>development/archetypes/statefull-webmodule</module>
    <module>development/archetypes/stateless-webmodule</module>
    <module>development/archetypes/enhancement-engine</module> -->
  </modules>

  <profiles>
    <profile>
      <id>it</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <modules>
        <module>integration-tests</module>     
      </modules>
    </profile>
    <profile>
      <id>rat</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <configuration>
              <excludeSubProjects>false</excludeSubProjects>
              <excludes>
                <!-- exclude hidden files -->
                <exclude>**/.*</exclude>
                <exclude>**/.*/*</exclude>
                <exclude>**/.*/**/*</exclude>

                <!-- exclude build files -->
                <exclude>**/target/**</exclude>
                <exclude>**/*.log</exclude>
                <exclude>launchers/full/sling/**</exclude>
                <exclude>launchers/full/factstore/**</exclude>                

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

                <!-- AL20 files without header by file type -->
                <exclude>**/*.config</exclude>
                <exclude>**/*.cfg</exclude>
                <exclude>**/*.ref</exclude>
                <exclude>**/*.txt</exclude>
                <exclude>**/*.tsv</exclude>
                <exclude>**/*.sem</exclude>

                <!-- Open NLP model files. Not in SVN, but downloaded during build -->
                <exclude>**/*.bin</exclude> 
                <exclude>**/test/**/*.eml</exclude>
                <exclude>**/test/**/*.nt</exclude>
                <exclude>**/test/**/*.html</exclude>
                <exclude>**/test/**/*.xhtml</exclude>
                <exclude>**/test/**/*.rdf</exclude>
                <exclude>**/test/**/*.rtf</exclude>
                <exclude>**/test/**/*.rules</exclude>
                <exclude>**/test/**/*.odt</exclude>

                <!-- approved licenses, see modules' POMs for details -->
                <exclude>commons/web/home/src/main/resources/org/apache/stanbol/commons/web/home/static/scripts/jquery-1.4.2.js</exclude>
                <exclude>contenthub/web/src/main/resources/org/apache/stanbol/contenthub/web/static/scripts/jit.js</exclude>
                <exclude>contenthub/web/src/main/resources/org/apache/stanbol/contenthub/web/static/style/jquery-ui-1.8.11.custom.css</exclude>
                <exclude>contenthub/web/src/main/resources/org/apache/stanbol/contenthub/web/static/scripts/jquery-ui-1.8.11.custom.min.js</exclude>
                <exclude>contenthub/web/src/main/resources/org/apache/stanbol/contenthub/web/static/scripts/jquery-1.5.1.min.js</exclude>
                <exclude>contenthub/web/src/main/resources/org/apache/stanbol/contenthub/web/static/scripts/jquery-1.4.2.js</exclude>
                <exclude>factstore/factstore/src/main/resources/org/apache/stanbol/factstore/web/static/scripts/json2.js</exclude>
                <exclude>ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/static/scripts/jquery-1.6.1</exclude>
                <exclude>reasoners/web/src/main/resources/org/apache/stanbol/reasoners/web/static/jquery/jquery-1.6.1</exclude>
                <exclude>rules/web/src/main/resources/org/apache/stanbol/rules/web/static/jquery/jquery-1.6.1</exclude>
                <exclude>enhancer/jersey/src/main/resources/org/apache/stanbol/enhancer/jersey/static/openlayers-2.9/**</exclude>
                <exclude>commons/owl/**</exclude>

                <!-- unstable and not release relevant stuff -->
                <exclude>PLAYGROUND.txt</exclude>
                <exclude>conventions/**</exclude>
                <exclude>contrib/**</exclude>
                <exclude>demos/**</exclude>
                <exclude>enhancer/data/text-examples/**</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>
