
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:
http://localhost:8080/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
=========================================================================
