
Welcome to Apache OFBiz!

All you need to run OFBiz is a 1.7 (version 7) JDK
(not just the JRE, the full JDK).
http://java.sun.com/javase/downloads/index.jsp

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 -XX:MaxPermSize=128m -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
=========================================================================
