<?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.uima</groupId>
    <artifactId>uimaj-parent</artifactId>
    <version>2.11.0</version>
    <relativePath>../uimaj-parent/pom.xml</relativePath>
  </parent>
  
	<artifactId>uimaj-core</artifactId>
	<packaging>jar</packaging>
	<name>Apache UIMA Base: ${project.artifactId}</name>
  <description>The core implementation of the UIMA Java Framework</description>
  <url>${uimaWebsiteUrl}</url>

  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
    <postNoticeText>${ibmNoticeText}</postNoticeText>
    <maven.surefire.heap>650M</maven.surefire.heap>
  </properties>
  
	<dependencies>
	  <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.8</version>
      <scope>provided</scope>
      <optional>true</optional>
    </dependency>
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimaj-test-util</artifactId>
			<version>${project.parent.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.assertj</groupId>
			<artifactId>assertj-core</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
		  <groupId>commons-io</groupId>
		  <artifactId>commons-io</artifactId>
		  <version>2.7</version>
      <scope>test</scope>
		</dependency>

		<!--  Uncomment one of these to add Saxon8 or 9 to the classpath for JUnit tests. 
		      1 fails due to different formatting and a dropped xmlns attribute, 
		      5 work when run separately or by mvn, but fail when running all tests from Eclipse:
		          Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element '....'
	    -->

   <!--
		<dependency>
		  <groupId>net.sf.saxon</groupId>
		  <artifactId>Saxon-HE</artifactId>
		  <version>9.7.0-14</version>
		  <scope>test</scope>
		</dependency>
    	
 
		<dependency>
		  <groupId>net.sf.saxon</groupId>
    	  <artifactId>saxon</artifactId>
    	  <version>8.7</version>
    	  <scope>test</scope>
		</dependency>
		<dependency>
		  <groupId>net.sf.saxon</groupId>
    	  <artifactId>saxon-dom</artifactId>
    	  <version>8.7</version>
    	  <scope>test</scope>
		</dependency>

		<dependency>    jackson stuff moved to uimaj-json project
			<groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-core</artifactId>
	    <version>2.4.2</version>
		</dependency>
      -->		
		<!-- This next dependency is used to enable findbug rule suppression annotations
		     Currently commented out - till more thought given to this. 
		     For instance, we don't want to accidentally distribute this dependency in builds
		<dependency>
			<groupId>com.google.code.findbugs</groupId>
			<artifactId>annotations</artifactId>
			<version>2.0.0</version>
			<scope>compile</scope>
		</dependency>
		 -->
	</dependencies>
	<build>
		<finalName>uima-core</finalName>
    <pluginManagement>
      <plugins>
        <!-- Uncomment the next to run with -Xlint:unchecked  -->
        <!--plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <compilerArgument>-Xlint:unchecked</compilerArgument>
          </configuration>
        </plugin-->
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <excludes combine.children="append">
                  <exclude>src/test/resources/CASTests/*.txt</exclude> <!-- test data -->
                  <exclude>src/test/resources/data/moby.txt</exclude>
                  <exclude>src/test/resources/org/apache/uima/resource/impl/ResourceInClasspath.txt</exclude> <!-- test data -->
                  <exclude>src/test/resources/pearTests/*.pear</exclude> <!-- test pear files -->
                  <exclude>src/test/resources/pearTests/encodingTests/*</exclude> <!-- test data, RAT can't reliably read these -->
                  <exclude>src/test/resources/SequencerTest/*.txt</exclude> <!-- test data -->
                  <exclude>src/test/resources/SerDes*/SavedInts.binary</exclude> <!-- test data -->
                </excludes>              
              </configuration>
            </execution>
          </executions>
        </plugin> 
        <!-- https://issues.apache.org/jira/browse/UIMA-5307
        <plugin>
          <artifactId>maven-enforcer-plugin</artifactId>
          <executions>
            <execution>
              <id>enforce-compatibility</id>
              <phase>verify</phase>
              <configuration>
                <rules>
                  <requireBackwardCompatibility implementation="org.semver.enforcer.RequireBackwardCompatibility">
                    <previousVersion>${compat.previous.version}</previousVersion>
                    <dumpDetails>true</dumpDetails>
                    <compatibilityType>${compat.level}</compatibilityType>
                    <excludes combine.children="append">
                      <exclude>org/apache/uima/jcas/cas/FSArray</exclude>
                      <exclude>org/apache/uima/jcas/cas/FSList</exclude>
                      <exclude>org/apache/uima/jcas/cas/NonEmptyFSList</exclude>
                      <exclude>org/apache/uima/jcas/cas/StringArray</exclude>
                      <exclude>org/apache/uima/jcas/cas/StringList</exclude>
                      <exclude>org/apache/uima/jcas/cas/NonEmptyStringList</exclude>
                      <exclude>org/apache/uima/jcas/cas/IntegerArray</exclude>
                      <exclude>org/apache/uima/jcas/cas/IntegerList</exclude>
                      <exclude>org/apache/uima/jcas/cas/NonEmptyIntegerList</exclude>
                      <exclude>org/apache/uima/jcas/cas/FloatArray</exclude>
                      <exclude>org/apache/uima/jcas/cas/FloatList</exclude>
                      <exclude>org/apache/uima/jcas/cas/NonEmptyFloatList</exclude>
                      <exclude>org/apache/uima/jcas/cas/BooleanArray</exclude>
                      <exclude>org/apache/uima/jcas/cas/ByteArray</exclude>
                      <exclude>org/apache/uima/jcas/cas/ShortArray</exclude>
                      <exclude>org/apache/uima/jcas/cas/LongArray</exclude>
                      <exclude>org/apache/uima/jcas/cas/DoubleArray</exclude>
                      <exclude>org/apache/uima/UimaContextHolder</exclude>
                    </excludes>
                  </requireBackwardCompatibility>
                </rules>
              </configuration>
            </execution>
          </executions>
        </plugin> -->
                
      </plugins>
    </pluginManagement>
    
		<plugins>
		
		  <!-- experiment with CLIRR
		    gets fatal error: 
		    
		    net.sf.clirr.core.CheckerException: Unable to find information in class org.apache.uima.cas.impl.AnnotationBaseImpl 
		    referring back to nested class org.apache.uima.cas.impl.AnnotationBaseImpl$1
        at net.sf.clirr.core.internal.bcel.BcelScopeHelper.getClassScope(BcelScopeHelper.java:127)
        at net.sf.clirr.core.internal.bcel.BcelJavaType.getDeclaredScope(BcelJavaType.java:141)
        at net.sf.clirr.core.internal.bcel.BcelJavaType.getEffectiveScope(BcelJavaType.java:145)
        at net.sf.clirr.core.internal.checks.ClassScopeCheck.check(ClassScopeCheck.java:72)
        at net.sf.clirr.core.Checker.runClassChecks(Checker.java:190)
        at net.sf.clirr.core.Checker.reportDiffs(Checker.java:136)
        at org.codehaus.mojo.clirr.AbstractClirrMojo.executeClirr(AbstractClirrMojo.java:236) 
		  -->
		  <!--plugin>  
		    <artifactId>clirr-maven-plugin</artifactId>
		    <groupId>org.codehaus.mojo</groupId>
		    <version>2.2.3-SNAPSHOT</version>
		    
		  </plugin-->
      
      <!-- filter the template for the version java code
           to insert the version from properties -->
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <executions>
          <execution>
            <id>setVersions</id>
            <goals><goal>copy-resources</goal></goals>
            <phase>generate-sources</phase>
            <configuration>
              <outputDirectory>${project.build.directory}/generated-sources/releaseVersion</outputDirectory>
              <resources>
                <resource>
                  <filtering>true</filtering>
                  <directory>src/main/versionJava</directory>
                </resource>
              </resources>
              <delimiters>
                <delimiter>${*}</delimiter>
              </delimiters>
              <useDefaultDelimiters>false</useDefaultDelimiters>
            </configuration>
          </execution>
        </executions>
      </plugin>
      
      <!-- add the generated sources to the compile sources -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>addVersionSrc</id>
            <goals><goal>add-source</goal></goals>
            <configuration>
              <sources>
                <source>${project.build.directory}/generated-sources/releaseVersion</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
