	<!--
    ***************************************************************
    * 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 uimaFIT</title>
</head>
<body>
<h1>Apache uimaFIT API Change Report</h1>

<h2>Contents</h2>
<p>
<a href="#description">What is an API change report?</a><br/>
<a target="_blank" href="uimafit-core/api-change-report/japicmp.html">API Changes: uimafit-core</a><br/>
<a target="_blank" href="uimafit-cpe/api-change-report/japicmp.html">API Changes: uimafit-cpe</a><br/>
<a target="_blank" href="uimafit-legacy-support/api-change-report/japicmp.html">API Changes: uimafit-legacy-support</a><br/>
<a target="_blank" href="uimafit-spring/api-change-report/japicmp.html">API Changes: uimafit-spring</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>
  			Four of the uimaFIT modules 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 four 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>