<?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/mini-war</module>
    <module>launchers/stable</module>
    <module>launchers/stable-war</module>
    <module>launchers/full</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>
