<?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>6-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>
