              Apache Distributed UIMA Cluster Computing (DUCC) Version 2.1.0 README
              

1. Building from the Source Distribution
========================================
     
We use Maven 3.0 for building; download this if needed, 
and set the environment variable MAVEN_OPTS to -Xmx800m -XX:MaxPermSize-256m.
To build UIMA-DUCC, install Java SDK 7.

Then build from the directory containing this README by issuing the command
   mvn clean install.
   
This builds everything except the source-release.zip file and DUCC documentation. 
To build the documentation make sure you have LATEX installed and set the
environment variable BUILD_DUCCDOCS=true, or activate the build-duccdocs profile with:

   mvn clean install -Pbuild-duccdocs

To build everything including the source-release.zip and documentation, use:

   mvn clean install -Papache-release,build-duccdocs
   
To setup GPG signing see http://uima.apache.org/one-time-release-setup.html
   
Look for the result in the two artifacts: 
   target/uima-ducc-[version]-source-release.zip (if run with -Papache-release) and
   target/uima-ducc-[version]-bin.tar.gz

For more details, please see http://uima.apache.org/building-uima.html   

   
2. Contents of Apache UIMA DUCC binary distribution
--------------------------------------------------

The Apache UIMA DUCC binary distribution includes
   
  shell scripts:
  --------------

  admin/start_ducc: starts DUCC
  admin/stop_ducc: stops DUCC
  

  documentation:
  --------------
 
  docs/d/duccbok.pdf: UIMA-DUCC documentation (PDF Format)
  docs/d/duccbok.html: UIMA-DUCC documentation (HTML Format)
  
  docs/d/installation.pdf: UIMA-DUCC installation guide (PDF Format)
  docs/d/installation.html: UIMA-DUCC installation guide (HTML Format)

  UIMA DUCC Getting Started can be found online here:
  http://uima.apache.org/doc-uimaducc-whatitam.html
    
 
  examples:
  ---------
 
  examples/ - contains ducc example source code and resources
  
  descriptors:
  ------------
 
  examples/sampleapps/descriptors/ - contains sample descriptor files 

  resources
  -----------
  
  resources/ - contains ducc configuration files
  
  
3. Installation and Setup
=========================

Please refer to the INSTALL document located in the directory containing this README for 
installation instructions.

3.1 Supported Platforms
-----------------------

UIMA-DUCC has been tested with Oracle Java 7 & 8 as well as IBM Java 7 & 8 on Linux. 
The cluster of machines DUCC manages
must all be running a reasonably current level of Linux; other operating systems are not supported.
. 


4. How to Get Involved
======================
The Apache UIMA project really needs and appreciates any contributions, 
including documentation help, source code and feedback.  If you are interested
in contributing, please visit 
http://uima.apache.org/get-involved.html

5. How to Report Issues
=======================
The Apache UIMA project uses JIRA for issue tracking.  Please report any 
issues you find at  http://issues.apache.org/jira/browse/uima
  


Crypto Notice
-------------

   This distribution includes cryptographic software.  The country in 
   which you currently reside may have restrictions on the import, 
   possession, use, and/or re-export to another country, of 
   encryption software.  BEFORE using any encryption software, please 
   check your country's laws, regulations and policies concerning the
   import, possession, or use, and re-export of encryption software, to 
   see if this is permitted.  See <http://www.wassenaar.org/> for more
   information.

   The U.S. Government Department of Commerce, Bureau of Industry and
   Security (BIS), has classified this software as Export Commodity 
   Control Number (ECCN) 5D002.C.1, which includes information security
   software using or performing cryptographic functions with asymmetric
   algorithms.  The form and manner of this Apache Software Foundation
   distribution makes it eligible for export under the License Exception
   ENC Technology Software Unrestricted (TSU) exception (see the BIS 
   Export Administration Regulations, Section 740.13) for both object 
   code and source code.

   The following provides more details on the included cryptographic
   software:
   
   This distribution includes portions of Apache ActiveMQ, which, in
   turn, is classified as being controlled under ECCN 5D002.
 
