
Apache UIMA Ruta (TM) v2.6.1
-------------------------------------------------------------------------

Building from the Source Distribution
-------------------------------------

We use Maven 3.0 or later for building; download this if needed, 
and set the environment variable MAVEN_OPTS to -Xmx800m -XX:MaxPerSize=256m.

Then do the build by going into the UIMA Ruta directory, and issuing the command
   mvn clean install
   
This builds everything except the ...source-release.zip file. If you want that,
change the command to 

   mvn clean install -Papache-release
   
For more details, please see http://uima.apache.org/building-uima.html   


-------------------------------------

This product was originally released as Apache UIMA TextMarker. The UIMA Ruta Workbench provides
a command for updating old projects. Please right-click on a project and select "UIMA Ruta -> Update Project". 

-------------------------------------

The UIMA Ruta analysis engine requires type priorities for the correct execution of rules. 
If a CAS is created using the CASCreationUtils, please provide the type priorities, e.g., by:

    URL tpUrl = this.getClass().getResource("/org/apache/uima/ruta/engine/TypePriorities.xml");
    TypePriorities typePriorities = UIMAFramework.getXMLParser().parseTypePriorities(
        new XMLInputSource(tpUrl));
    CAS cas = CasCreationUtils.createCas(descriptor, typePriorities, new FsIndexDescription[0]);

-------------------------------------

Using the jcasgen-maven-plugin may cause problems if it creates duplicate classes for the 
internal UIMA Ruta types (overwriting the implementation of RutaBasic). Depending on the location 
of the type system descriptors, the plugin should be configured to be limited on the project, 
or the UIMA Ruta type system descriptors should explicitly be excluded:

    <configuration>
      <typeSystemExcludes>
        <typeSystemExclude>/**/BasicTypeSystem.xml</typeSystemExclude>
        <typeSystemExclude>/**/InternalTypeSystem.xml</typeSystemExclude>
      </typeSystemExcludes>
    </configuration>

-------------------------------------

If you use the uimaFIT JCasGenPomFriendly in Maven and want to use UIMA Ruta 
as a standalone annotator you have to exclude the generated UIMA Ruta basic 
type files from the build, e.g., by adding:


   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0</version>
    <configuration>
         <excludes>
             <exclude>org/apache/uima/ruta/type/*.java</exclude>
         </excludes>
    </configuration>
   </plugin> 



