<?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>org.apache.stanbol.enhancer.parent</artifactId>
    <version>0.10.0-SNAPSHOT</version>
    <relativePath>../../parent</relativePath>
  </parent>

  <groupId>org.apache.stanbol</groupId>
  <artifactId>org.apache.stanbol.enhancer.engine.topic</artifactId>
  <version>0.10.0-SNAPSHOT</version>
  <packaging>bundle</packaging>

  <name>Apache Stanbol Enhancer Enhancement Engine : Topic Classification</name>
  <description>
    Implementation of an annotation engine that links the content item
    to a set of possible categories from a dedicated Solr index using
    MoreLikeThis queries.

    The classification can be either applied to a complete document
    (text in a given language) which is the default behavior or to a
    specific portion of the text (using a TextAnnotation).
  </description>

  <inceptionYear>2010</inceptionYear>

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

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.servicemix.tooling</groupId>
        <artifactId>depends-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Import-Package>
              org.apache.stanbol.enhancer.servicesapi; provide:=true,
              org.apache.stanbol.enhancer.servicesapi.impl; provide:=true,
              *
            </Import-Package>
            <Export-Package>
              org.apache.stanbol.enhancer.topic;version=${project.version},
              org.apache.stanbol.enhancer.topic.training;version=${project.version}
            </Export-Package>
            <Private-Package>
              org.apache.stanbol.enhancer.engine.topic
            </Private-Package>
            <Install-Path>install-config</Install-Path>
            <Data-Files>data-files</Data-Files>
            <Data-Files-Priority>-100</Data-Files-Priority>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-scr-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <!-- AL20 licensed files. See src/main/resources/README -->
            <exclude>src/main/resources/install-config/default-topic-model.solrindex.ref</exclude>
            <exclude>src/license/THIRD-PARTY.properties</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <!--
          Pack the default solr configurations as *.solrindex.zip configs
          suitable for registration to the DataFileProvider service.
        -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>compile</id>
            <phase>compile</phase>
            <configuration>
              <target>
                <property name="resources.dir"
                  value="${project.basedir}/src/main/resources/"/>
                <ant antfile="${project.basedir}/build-archives.xml">
                  <target name="all"/>
                </ant>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <!-- Runtime dependencies for testing

    WARNING: the testing dependencies should be put first because that has an
    impact on the classpath ordering and the OSGi implementation from the test
    framework needs to be picked up over the one that comes from other build
    dependencies (e.g. clerezza) otherwise the test will fail to run with maven
    with the following error message:

    java.lang.NoClassDefFoundError: org.osgi.vendor.framework property not set
    -->
    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam-junit4</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <!-- provides the javax.inject.Inject annotation -->
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-atinject_1.0_spec</artifactId>
      <version>1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam-link-assembly</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam-testforge</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam-spi</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.ops4j.pax.url</groupId>
      <artifactId>pax-url-mvn</artifactId>
      <scope>test</scope>
      <version>1.3.5</version>
    </dependency>
    <!-- The following container should make it possible to run the OSGi
      faster by using felix in the host JVM rather than forking a dedicated JVM. -->
    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam-container-native</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.framework</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.scr</artifactId>
      <scope>test</scope>
    </dependency>
    <!-- The following container can be use instead of native if we want
      to fork a new JVM and / or test against equinox for instance -->
    <!--
    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam-container-paxrunner</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.ops4j.pax.runner</groupId>
      <artifactId>pax-runner-no-jcl</artifactId>
      <scope>test</scope>
    </dependency>
    -->

    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.http.jetty</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.configadmin</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpcore-osgi</artifactId>
      <version>4.0.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.clerezza</groupId>
      <artifactId>utils</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.clerezza.ext</groupId>
      <artifactId>com.ibm.icu</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.wymiwyg</groupId>
      <artifactId>wymiwyg-commons-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.scr.annotations</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.clerezza</groupId>
      <artifactId>rdf.core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.clerezza</groupId>
      <artifactId>rdf.jena.parser</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency> <!--  contains the GraphNode -->
      <groupId>org.apache.clerezza</groupId>
      <artifactId>rdf.utils</artifactId>
    </dependency>

    <!-- Normal build dependencies -->
    <dependency>
      <groupId>org.apache.stanbol</groupId>
      <artifactId>org.apache.stanbol.entityhub.servicesapi</artifactId>
      <version>0.11.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.apache.stanbol</groupId>
      <artifactId>org.apache.stanbol.enhancer.servicesapi</artifactId>
      <version>0.10.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.apache.stanbol</groupId>
      <artifactId>org.apache.stanbol.commons.solr.core</artifactId>
      <version>0.10.1-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.apache.stanbol</groupId>
      <artifactId>org.apache.stanbol.commons.solr.managed</artifactId>
      <version>0.10.0-SNAPSHOT</version>
    </dependency>    
  </dependencies>

</project>
