              Apache Distributed UIMA Cluster Computing (DUCC) Version 3.0.0 README
              

1. Building from the Source Distribution
========================================
     
We use Maven 3.3.3 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 8.

Maven uses JAVA_HOME to locate the java runtime. Before starting maven build do this:

export JAVA_HOME=<your java dir>


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

Please refer to Section 12.3 "Building from Source" of the duccbook document for
more information about building ducc documentation.

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 runtime has been tested with Oracle 8 as well as IBM Java 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.
 
