<?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.1-SNAPSHOT</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>
    <junit-version>5.9.1</junit-version>
  </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.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>${junit-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <version>${junit-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>
