<?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-enhancement-engines</artifactId>
  <version>1.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Apache Stanbol Enhancement Engines</name>
  <description>
    Pseudo project to build all Enhancement Engines
  </description>
  <inceptionYear>2010</inceptionYear>

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

  <modules>
	  <!-- Content processing / Metadata extraction -->
    <module>tika</module>
    <module>htmlextractor</module>
    <module>xmpextractor</module>
    <!-- TODO: reactivate as soon as mvn repo is back online -->
    <!-- module>metaxa</module -->
    <module>refactor</module>

    <!-- NLP processing engines -->
	  <module>langdetect</module>
    <module>langid</module>
    <module>opennlp</module>
    <module>pos-chunker</module>

    <!-- Chinese language support -->
    <module>smartcn-token</module> <!-- sentence detection and tokenizing -->

    <module>nlp2rdf</module> <!-- converts AnalyzedText ContentPart to RDF -->

    <!-- Japanese NLP processing -->
    <module>kuromoji-nlp</module>

    <!-- RESTful NLP analyser service engine-->
    <module>restful-nlp</module> <!-- see STANBOL-893 -->
    <module>restful-langident</module> <!-- see STANBOL-895 -->
  
  	<!-- EntityLinking -->
    <module>entitylinking</module>
    <module>entityhublinking</module>
    <module>entitytagging</module>
    <!-- fast EntityLinking using Lucene FST -->
    <module>lucenefstlinking</module> <!-- see STANBOL-1128 -->
    <!-- deprecated -->
    <module>keywordextraction</module>
    

	  <!-- Categorization -->
    <module>topic/api</module>
    <module>topic/engine</module>
    <module>topic/web</module>

	  <!-- Sentiment -->
    <module>sentiment-wordclassifier</module>
    <module>sentiment-summarization</module>

    <!-- Disambiguation -->
    <module>disambiguation-mlt</module>
    
    <!-- UIMA based engines -->
    <module>uima</module>
    
    <!-- Post-Processing-->
    <!-- converts TextAnnotations to the STANBOL-987 model -->
    <module>textannotationnewmodel</module> 
    <!-- finds co-mentions of Entities earlier mentioned on the Text (STANBOL-1070)  -->
    <module>entitycomention</module>
    
    <!-- Entity Dereference (STANBOL-336) -->
    <module>dereference/core</module>
    <module>dereference/entityhub</module> <!-- STANBOL-1223 -->
    
    <!-- Enhancement Engines using external services -->
    <module>celi</module> <!-- http://linguagrid.org -->
    <module>dbpedia-spotlight</module> <!-- dbpedia Spotlight -->
    <module>geonames</module> <!-- http://geonames.org -->
    <module>opencalais</module> <!-- http://opencalais.com/ -->
    <module>zemanta</module> <!-- htt://zemanta.com -->

	<module>entitycoreference</module>
  </modules>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <inherited>true</inherited>
          <configuration>
            <instructions>
              <Bundle-Category>Stanbol Enhancement Engines</Bundle-Category>
            </instructions>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>    
  </build>

  <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 certain file types -->
                <exclude>**/*.config</exclude>
                <exclude>**/*.cfg</exclude>
                <exclude>**/*.ref</exclude>
                <exclude>**/*.txt</exclude>
                <exclude>**/*.tsv</exclude>
                <exclude>**/*.sem</exclude>
                <exclude>**/*.svg</exclude>
                <exclude>**/*.css</exclude>
                <exclude>**/*.js</exclude>

                <!-- exclude test files --> 
                <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>
                <exclude>**/test/**/*.json</exclude>
                <exclude>entitycoreference/src/main/resources/data/place_adjectivals/en</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>
