
Welcome to Apache OFBiz!

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

You can load the demo data (strongly advised) with the following
command on the command line from the OFBiz home folder (in Unix-like
operating systems type "./ant" rather than "ant"):

ant load-demo

Then start OFBiz with the following command:

ant start

(or "java -Xms128M -Xmx512M -XX:MaxPermSize=128m -jar ofbiz.jar")

Once OFBiz starts, you can look at the demo storefront at:
http://localhost:8080/ecommerce

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

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

You can stop OFBiz with the command:

ant stop

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).

For more details about running a build, or for information on
getting, building, and running the source please see the
Apache OFBiz Setup Guide:

http://cwiki.apache.org/confluence/display/OFBADMIN/Demo+and+Test+Setup+Guide

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

To prepare OFBiz for production use the Basic Production Setup Guide
is a great place to start. It is available here:

http://cwiki.apache.org/confluence/display/OFBTECH/Apache+OFBiz+Technical+Production+Setup+Guide

Are you newbie for Apache OFBiz project? Are you confused how to start development? Please refer the beginner guide available at:

https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Tutorial+-+A+Beginners+Development+Guide   

For additional resources please see the OFBiz web site.

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
=========================================================================
