	<!--
    ***************************************************************
    * 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.
    ***************************************************************
   -->
<html>
<head>
  <title>API Change Report - Apache UIMA</title>
</head>
<body>
<h1>Apache UIMA (Unstructured Information Management Architecture) API Change Report</h1>

<h2>Contents</h2>
<p>
<a href="#description">What is an API change report?</a><br/>
<a target="_blank" href="uimaj-core/api-change-report/japicmp.html">API Changes: uimaj-core</a><br/>
<a target="_blank" href="uimaj-cpe/api-change-report/japicmp.html">API Changes: uimaj-cpe</a><br/>
<a target="_blank" href="uimaj-json/api-change-report/japicmp.html">API Changes: uimaj-json</a><br/>
<a href="#running-more-reports">Running your own custom reports</a>
</p>  
   
<h2><a id="description">What is an API change report?</a></h2>

     <p>
  			Three of the modules in the UIMA Java SDK track API changes from version to version.
  			The changes between this current version and the last previously released version are
  			reported below.  Each report includes a summary of Classes that were changed, together with
  			a flag indicating if the change was a source or binary incompatible change.
  			More details about each change are available further down in the report.
  	 </p>
  	 
  	 <p>
  	   Follow the links above to get the report for each of the 3 modules.		
  	 </p>
  	 
 
<h2><a id="running-more-reports">Running additional change reports</a></h2>
<p>The reports are generated by an open source tool, 
<a target="_blank" href="http://siom79.github.io/japicmp/">japicmp</a>, which compares two versions of
a Java Jar and generates the report.  See that website for details on how to run this for arbitrary versions, if you
want to compare other versions.
</p> 
    
</body>
</html>