<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>ruta-core</artifactId>
  <version>2.8.1</version>
  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>ruta-parent</artifactId>
    <version>2.8.1</version>
    <relativePath>../ruta-parent/pom.xml</relativePath>
  </parent>
  
  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
    <postNoticeText>${uniWueNoticeText}</postNoticeText>
  </properties>
  <url>${uimaWebsiteUrl}</url>
  <description>The core implementation of the UIMA Ruta rule engine.</description>
  <name>Apache UIMA Ruta: ${project.artifactId}</name>
  
  <dependencies>
  
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>ruta-typesystem</artifactId>
      <version>${project.parent.version}</version>
    </dependency>
    
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-core</artifactId>
      <version>${uimaVersion}</version>
    </dependency>
    
   <dependency>
      <groupId>org.antlr</groupId>
      <artifactId>antlr-runtime</artifactId>
      <version>3.5.2</version>
      <exclusions>
        <exclusion>
          <groupId>org.antlr</groupId> 
          <artifactId>stringtemplate</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    
    <dependency>
      <groupId>org.htmlparser</groupId>
      <artifactId>htmlparser</artifactId>
      <version>1.6</version>
    </dependency>
    
    <dependency>
	   <groupId>org.apache.commons</groupId>
	   <artifactId>commons-text</artifactId>
	   <version>1.6</version>
	</dependency>
    
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2.1</version>
      <scope>compile</scope>
    </dependency>
    
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-tools</artifactId>
      <version>${uimaVersion}</version>
      <scope>compile</scope>
    </dependency>
    
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-test-util</artifactId>
      <version>${uimaVersion}</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.8.1</version>
    </dependency>
    
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimafit-core</artifactId>
      <version>${uimafit-version}</version>
      <!-- Exclude aop stuff, which is not need by uimafit 
      and only introduces a non-asl license -->
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId> 
          <artifactId>spring-aop</artifactId>
        </exclusion>
        <exclusion>
          <groupId>aopalliance</groupId> 
          <artifactId>aopalliance</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    
    <!-- needed for ruta-ep-ide - TODO this should be moved to engine? -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    
    <!-- needed for ruta-ep-textruler/ruta-ep-addons - TODO this should be moved to engine? -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-math3</artifactId>
      <version>3.0</version>
    </dependency>
    
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <scm>
    <url>http://svn.apache.org/viewvc/uima/ruta/tags/ruta-2.8.1/ruta-core</url>
    <connection>scm:svn:http://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.8.1/ruta-core</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.8.1/ruta-core</developerConnection>
  </scm>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <excludes>
                  <exclude>src/main/antlr3/org/apache/uima/ruta/parser/RutaLexer.tokens</exclude> <!-- grammar tokens -->
                  <exclude>src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.tokens</exclude> <!-- grammar tokens -->
                  <exclude>src/test/resources/org/apache/uima/ruta/**/*.txt</exclude> <!-- test data -->
                  <exclude>src/test/resources/org/apache/uima/ruta/**/*.ruta</exclude> <!-- test data -->
                  <exclude>src/test/resources/org/apache/uima/ruta/action/*.*</exclude> <!-- test data -->
                  <exclude>src/test/resources/org/apache/uima/ruta/table2.csv</exclude> <!-- test data -->
                  <exclude>src/test/resources/org/apache/uima/ruta/resource/test_csvfile.csv</exclude> <!-- test data -->
                  <exclude>src/test/resources/org/apache/uima/ruta/engine/*.html</exclude> <!-- test data -->
                  <exclude>src/test/resources/META-INF/org.apache.uima.fit/types.txt</exclude> <!-- test data -->
                  <exclude>src/main/resources/META-INF/org.apache.uima.fit/*.txt</exclude>
                  <exclude>api-change-report/**</exclude>
                  <exclude>issuesFixed/**</exclude> <!-- generated -->
                  <exclude>input/**</exclude> <!-- temp test data -->
                  <exclude>TypeSystem.xml</exclude> <!-- temp test data -->
                  <exclude>marker-file-identifying-*</exclude>
                </excludes>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
        	<groupId>org.eclipse.m2e</groupId>
        	<artifactId>lifecycle-mapping</artifactId>
        	<version>1.0.0</version>
        	<configuration>
        		<lifecycleMappingMetadata>
        			<pluginExecutions>
        				<pluginExecution>
        					<pluginExecutionFilter>
        						<groupId>de.jflex</groupId>
        						<artifactId>
        							jflex-maven-plugin
        						</artifactId>
        						<versionRange>[1.6.1,)</versionRange>
        						<goals>
        							<goal>generate</goal>
        						</goals>
        					</pluginExecutionFilter>
        					<action>
        						<ignore />
        					</action>
        				</pluginExecution>
        			</pluginExecutions>
        		</lifecycleMappingMetadata>
        	</configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <plugins>
      <!-- generate java code for antlr grammars -->
      <plugin>
        <groupId>org.antlr</groupId>
        <artifactId>antlr3-maven-plugin</artifactId>
        <version>3.5.2</version>
        <executions>
          <execution>
            <id>run antlr</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>antlr</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

	  <plugin>
        <groupId>de.jflex</groupId>
        <artifactId>jflex-maven-plugin</artifactId>
        <version>1.6.1</version>
        <executions>
          <execution>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      
       <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>add-antlr-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${basedir}/target/generated-sources/antlr3
                </source>
              </sources>
            </configuration>
          </execution>
          <execution>
            <id>add-jflex-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${basedir}/target/generated-sources/jflex
                </source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <argLine>-Xmx650M</argLine>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <!-- Exclude generated jcas classes -->
          <sourceFileExcludes>
            <sourceFileExclude>**/org/apache/uima/ruta/type/*.java</sourceFileExclude>
          </sourceFileExcludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>