<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <!--
      ** Indexer
      # install the indexer
      $ mvn clean compile assembly:single
      # Then run e.g.
      $ java -jar target/KorAP-lucene-index-X.XX.jar
             src/main/resources/korap.conf
             /data/hdd/lucene-new/WPD/

      ** Server
      # Start the server with
      $ mvn clean compile exec:java

      ** Formatter
      # Format the code with
      $ mvn java-formatter:format

  -->

  <groupId>KorAP-modules</groupId>
  <artifactId>KorAP-lucene-index</artifactId>
  <version>0.49.4</version>
  <packaging>jar</packaging>

  <name>KorAP-lucene-index</name>
  <url>http://www.ids-mannheim.de/</url>

  <organization>
    <name>IDS Mannheim</name>
    <url>http://www.ids-mannheim.de/</url>
  </organization>

  <developers>
    <developer>
      <name>Nils Diewald</name>
      <email>diewald@ids-mannheim.de</email>
      <url>http://nils-diewald.de</url>
    </developer>
    <developer>
      <name>Eliza Margaretha</name>
      <email>margaretha@ids-mannheim.de</email>
    </developer>
  </developers>

  <properties>
    <jersey.version>2.15</jersey.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.glassfish.jersey</groupId>
        <artifactId>jersey-bom</artifactId>
        <version>${jersey.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>	
    <!-- junit dependency -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- log4j dependency -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.5</version>
    </dependency>

    <!-- SQLite for database connection tests -->
    <dependency>
      <groupId>org.xerial</groupId>
      <artifactId>sqlite-jdbc</artifactId>
      <version>3.7.2</version>
    </dependency>

    <!-- Database Connection Pool Manager -->
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
    </dependency>
    
    <!-- Lucene core dependency -->
    <dependency>
      <artifactId>lucene-core</artifactId>
      <groupId>org.apache.lucene</groupId>
      <type>jar</type>
      <version>4.10.3</version>
    </dependency>

    <!-- Lucene queryparser dependency -->
    <dependency>
      <artifactId>lucene-queryparser</artifactId>
      <groupId>org.apache.lucene</groupId>
      <type>jar</type>
      <version>4.10.3</version>
    </dependency>

    <!-- Lucene analyzers dependency -->
    <dependency>
      <artifactId>lucene-analyzers-common</artifactId>
      <groupId>org.apache.lucene</groupId>
      <type>jar</type>
      <version>4.10.3</version>
    </dependency>

    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-core</artifactId>
      <version>1.3</version>
    </dependency>

    <!-- JCache -->
    <dependency>
      <groupId>net.sf.jsr107cache</groupId>
      <artifactId>jsr107cache</artifactId>
      <version>1.0</version>
    </dependency>

    <!-- Jersey -->
    <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-grizzly2-http</artifactId>
    </dependency>

    <dependency>
      <groupId>com.sun.jersey.contribs</groupId>
      <artifactId>jersey-freemarker</artifactId>
      <version>1.13-b01</version>
    </dependency>

    <!-- JSON support in Jersey -->
    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-moxy</artifactId>
    </dependency>

    <!-- JSON support using Jackson -->
    <!-- see https://github.com/FasterXML/jackson-core -->
    <!-- https://github.com/FasterXML/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.4.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.4.4</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.4.4</version>
    </dependency>
<!--
    Temporarily disable @Experimental annotation
    <dependency>
      <groupId>KorapAnnotationProcessor</groupId>
      <artifactId>KorapAnnotationProcessor</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>
-->
  </dependencies>

  <build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <outputDirectory>${basedir}/bin</outputDirectory>
    <plugins>
      <plugin>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>2.5.1</version>
	<inherited>true</inherited>
	<configuration>
	  <showWarnings>true</showWarnings>
	  <source>1.7</source>
	  <target>1.7</target>
	</configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-5</version>
        <configuration>	    
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <mainClass>de.ids_mannheim.korap.KorapIndexer</mainClass>
            </manifest>
          </archive>
          <appendAssemblyId>false</appendAssemblyId>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>KorapIndexer</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <finalName>KorapIndexer</finalName>
              <archive>
                <manifest>
		  <mainClass>de.ids_mannheim.korap.KorapIndexer</mainClass>
                </manifest>
              </archive>
            </configuration>
          </execution>
	</executions>
      </plugin>
 
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.16</version>
        <configuration>
          <excludes>
            <exclude>**/benchmark/*</exclude>
            <exclude>**/TestWPDIndex.java</exclude>
            <exclude>**/TestRealIndex.java</exclude>
	  </excludes>
        </configuration>
      </plugin> 

      <!--
	  Formatter plugin for Eclipse based coding conventions
	  http://maven-java-formatter-plugin.googlecode.com/svn/site/0.4/usage.html
      -->
      <plugin>
        <groupId>com.googlecode.maven-java-formatter-plugin</groupId>
        <artifactId>maven-java-formatter-plugin</artifactId>
        <version>0.4</version>
	<configuration>
	  <configFile>${project.basedir}/korap-style.xml</configFile>
	  <overrideConfigCompilerVersion>true</overrideConfigCompilerVersion>
	  <compilerSource>1.7</compilerSource>
	  <compilerCompliance>1.7</compilerCompliance>
	  <compilerTargetPlatform>1.7</compilerTargetPlatform>
	</configuration>
      </plugin>

      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <mainClass>de.ids_mannheim.korap.KorapNode</mainClass>
        </configuration>
      </plugin>
    </plugins>

    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
	<includes>
	  <include>index.properties</include>
	</includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
	<excludes>
	  <exclude>index.properties</exclude>
	</excludes>
      </resource>
    </resources> 

    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
        <filtering>true</filtering>
	<includes>
	  <include>index.properties</include>
	</includes>
      </testResource>
      <testResource>
        <directory>src/test/resources</directory>
        <filtering>false</filtering>
	<excludes>
	  <exclude>index.properties</exclude>
	</excludes>
      </testResource>
    </testResources> 
  </build>
</project>
