<?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>3.1.1</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>

  <!-- Special inheritance note
       even though the <scm> element that follows is exactly the 
       same as those in super poms, it cannot be inherited because 
       there is some special code that computes the connection elements
       from the chain of parent poms, if this is omitted. 
       
       Keeping this a bit factored allows cutting/pasting the <scm>
       element, and just changing the following two properties -->  
  <scm>
    <connection>
      scm:git:https://github.com/apache/uima-uimaj/uimaj-core
    </connection>
    <developerConnection>
      scm:git:https://github.com/apache/uima-uimaj/uimaj-core
    </developerConnection>
    <url>
      https://github.com/apache/uima-uimaj/tree/master/uimaj-core
    </url>
    <tag>uimaj-3.1.1</tag>
  </scm>
  
  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
    <postNoticeText>${ibmNoticeText}</postNoticeText>
    <maven.surefire.heap>650M</maven.surefire.heap>
  </properties>
  
	<dependencies>
    
    <!-- Loggers -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>  <!-- core, not api, because need to set log level via api -->
      <version>${log4j.version}</version>
      <!--  "provided" fails in maven test - says cannot initialize class that makes ref to classes in this jar 
            "test" fails in maven compile - cannot compile -->
      <scope>provided</scope>
    </dependency>

    <!-- dependency>  moved to surefire configuration
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId-->  <!-- core, not api, because need to set log level via api -->
      <!-- version>${log4j.version}</version-->
      <!--  "provided" fails in maven test - says cannot initialize class that makes ref to classes in this jar 
            "test" fails in maven compile - cannot compile -->
      <!-- scope>test</scope>
    </dependency-->

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j.version}</version>
      <!--  "provided" fails in maven test - says cannot initialize class that makes ref to classes in this jar 
            "test" fails in maven compile - cannot compile -->
      <scope>provided</scope>  
    </dependency>

     <!-- dependency>  moved to surefire configuration
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j.version}</version>
      <scope>test</scope>  
    </dependency-->
    
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
    
    <!-- needed to convert slf4j markers into log4j markers 
         and for running the test --> 
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>${log4j.version}</version>
      <!-- scope provided: put in compile classpath, excluded from test classpath, not passed along -->
      <scope>provided</scope> 
    </dependency>

     <!-- dependency>  moved to surefire configuration  
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>${log4j.version}</version>
      <scope>test</scope> 
    </dependency-->

    <!--  causes build error: package org.apache.logging.slf4j does not exist
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>${log4j.version}</version>
      <scope>test</scope>
    </dependency>
                     -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <scope>test</scope>
    </dependency>
    
		<dependency>
			<groupId>org.apache.uima</groupId>
			<artifactId>uimaj-test-util</artifactId>
			<version>${project.parent.version}</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>
  -->
		
    <!-- For decompiling recompiling jcas experiments -->
    <!--
    <dependency>
      <groupId>org.eclipse.jdt.core.compiler</groupId>
      <artifactId>ecj</artifactId>
      <version>4.4.2</version>
    </dependency>
    -->
    
    <!-- needed for UimaDecompiler class-->
    <dependency>  <!-- Apache v2 license  2016 checked -->
      <groupId>org.bitbucket.mstrobel</groupId>
      <artifactId>procyon-compilertools</artifactId>
      <version>0.5.32</version>
    </dependency>
    
    <!-- Apache v2 license  2016 checked. Also transitive include from above, 
         listed here so that binary assembly for distribution includes the jar -->
    <dependency>  
      <groupId>org.bitbucket.mstrobel</groupId>
      <artifactId>procyon-core</artifactId>
      <version>0.5.32</version>
    </dependency>
    
    <!-- for reading / transforming / generating JCas cover classes -->
<!--     <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm</artifactId>
      <version>5.0.4</version>
    </dependency>

    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm-tree</artifactId>
      <version>5.0.4</version>
    </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 -->
                  <exclude>src/test/java/aa/*.java</exclude> <!-- jcas classes generated -->
                  <exclude>src/test/java/org/apache/uima/cas/test/*.java</exclude> <!-- jcas classes generated -->
                  <exclude>src/test/java/org/apache/lang/LanguagePair.java</exclude> <!-- jcas classes generated -->
                  <exclude>src/test/java/sofa/test/CrossAnnotation.java</exclude> <!-- jcas classes generated -->
                  <exclude>src/test/java/x/y/z/*.java</exclude> <!-- jcas classes generated -->
                </excludes>              
              </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>
      
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
          <!-- set the heap using the property maven.surefire.heap -->
          <!--  include dependencies that are for logging but specified as "provided" -->
          <additionalClasspathElements>
            <additionalClasspathElement>${settings.localRepository}/org/apache/logging/log4j/log4j-core/${log4j.version}/log4j-core-${log4j.version}.jar</additionalClasspathElement>
            <additionalClasspathElement>${settings.localRepository}/org/apache/logging/log4j/log4j-api/${log4j.version}/log4j-api-${log4j.version}.jar</additionalClasspathElement>
            <additionalClasspathElement>${settings.localRepository}/org/apache/logging/log4j/log4j-slf4j-impl/${log4j.version}/log4j-slf4j-impl-${log4j.version}.jar</additionalClasspathElement>
          </additionalClasspathElements>
          <!-- exclude log4j slf bridge for testing 
          <classpathDependencyExcludes>
            <classpathDependencyExclude>org.apache.logging.log4j:log4j-slf4j-impl</classpathDependencyExclude>
          </classpathDependencyExcludes>          -->
				</configuration>
			</plugin>
		</plugins>
	</build>
  
</project>