
Welcome to Apache OFBiz!

All you need to run OFBiz is a 1.8 (version 8) JDK
(not just the JRE, the full JDK).
http://www.oracle.com/technetwork/java/javase/downloads/index.html

You can load the demo data (strongly advised if you are new to
OFBiz) with the following command on the command line
from the OFBiz home folder (in Unix-like operating systems
type "./ant" rather than "ant" to use the embed ant version
 if you haven't installed it on your system) :

ant load-demo

Then start OFBiz:

ant start

(or "java -Xms128M -Xmx512M -jar ofbiz.jar")
(you can also run directly "ant load-demo start")

Once OFBiz starts, you can look at the demo storefront at:
https://localhost:8443/ecommerce

the back office at:
https://localhost:8443/ordermgr

and the administration interface at:
https://localhost:8443/webtools

You can log in with the user "admin" and password "ofbiz".

To stop OFBiz:

ant stop

To get the list of available commands:

ant -p

You will also find several platform dependent scripts in the
"tools" folder (for example for Windows and Unix-like operating
systems, the startup scripts are startofbiz.bat and startofbiz.sh).

Note that the default configuration uses an embedded Java database
(Apache Derby) and embedded application server components such as
Tomcat, Geronimo (transaction manager), etc.

For more details about OFBiz please visit the OFBiz Documentation page:

http://ofbiz.apache.org/documentation.html

In this page you will find links to useful guides such as:
* "Demo and Test Setup Guide"
* "Basic Production Setup Guide"
* "A Beginners Development Guide"

If you would like to get in touch with the OFBiz community of users and
developers, the following page will help to get started:

http://ofbiz.apache.org/community.html

Enjoy!

=========================================================================
==  BIS Crypto TSU exception 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:

   * Various classes in OFBiz, including DesCrypt, HashCrypt, and
     BlowFishCrypt use libraries from the Sun Java JDK API including
     java.security.* and javax.crypto.* (the JCE, Java Cryptography
     Extensions API)
   * Other classes such as HttpClient and various related ones use
     the JSSE (Java Secure Sockets Extension) API
=========================================================================
