
Welcome to Apache OFBiz 10.04!

In order to run OFBiz you will need a
1.6 (version 6) JDK (not just the JRE, the full JDK).
http://www.oracle.com/technetwork/java/javase/downloads/index.html

You can build OFBiz and load the demo data (strongly advised) with the following command
on the command line: (being in the OFBiz directory)

linux: ./ant run-install
windows: ant run-install 

Once that is properly setup just run the executable jar file
that comes with OFBiz, which is ofbiz.jar. To do this on the
command line you would run:

java -Xms128M -Xmx512M -jar ofbiz.jar

Even better use the startup scripts for Windows and Unix-based
operating systems, namely startofbiz.bat and startofbiz.sh.

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

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

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